-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathautosizetextedit.cpp
More file actions
120 lines (102 loc) · 2.55 KB
/
autosizetextedit.cpp
File metadata and controls
120 lines (102 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "autosizetextedit.h"
#include <QFrame>
#include <QScrollBar>
#include <QAbstractTextDocumentLayout>
#include "stylestorage.h"
AutoSizeTextEdit::AutoSizeTextEdit(QWidget *AParent) : QTextBrowser(AParent)
{
FAutoResize = true;
FMinimumLines = 1;
FMaximumLines = 0;
setOpenLinks(false);
setOpenExternalLinks(false);
setAttribute(Qt::WA_MacShowFocusRect, false);
setTextInteractionFlags(Qt::TextEditorInteraction);
document()->setDocumentMargin(7);
setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
connect(verticalScrollBar(), SIGNAL(rangeChanged(int,int)), SLOT(onScrollBarRangeChanged(int,int)));
connect(this,SIGNAL(textChanged()),SLOT(onTextChanged()));
}
AutoSizeTextEdit::~AutoSizeTextEdit()
{
}
bool AutoSizeTextEdit::autoResize() const
{
return FAutoResize;
}
void AutoSizeTextEdit::setAutoResize(bool AResize)
{
if (AResize != FAutoResize)
{
FAutoResize = AResize;
updateGeometry();
}
}
int AutoSizeTextEdit::minimumLines() const
{
return FMinimumLines;
}
void AutoSizeTextEdit::setMinimumLines(int ALines)
{
if (ALines != FMinimumLines)
{
FMinimumLines = ALines>0 ? ALines : 1;
setMinimumHeight(textHeight(FMinimumLines));
updateGeometry();
}
}
int AutoSizeTextEdit::maximumLines() const
{
return FMaximumLines;
}
void AutoSizeTextEdit::setMaximumLines(int ALines)
{
if (ALines != FMaximumLines)
{
if (ALines > 0)
{
FMaximumLines = ALines;
setMaximumHeight(textHeight(FMaximumLines));
}
else
{
FMaximumLines = 0;
setMaximumHeight(QWIDGETSIZE_MAX);
}
updateGeometry();
}
}
QSize AutoSizeTextEdit::sizeHint() const
{
QSize sh = QTextEdit::sizeHint();
sh.setHeight(qMin(textHeight(!FAutoResize ? FMinimumLines : 0),maximumHeight()));
return sh;
}
QSize AutoSizeTextEdit::minimumSizeHint() const
{
QSize sh = QTextEdit::minimumSizeHint();
sh.setHeight(textHeight(FMinimumLines));
return sh;
}
void AutoSizeTextEdit::keyPressEvent(QKeyEvent *ev)
{
// ignoring QTextBrowser's implementation
QTextEdit::keyPressEvent(ev);
}
int AutoSizeTextEdit::textHeight(int ALines) const
{
if (ALines > 0)
return fontMetrics().height()*ALines + (frameWidth() + qRound(document()->documentMargin()))*2;
else
return qRound(document()->documentLayout()->documentSize().height()) + frameWidth()*2;
}
void AutoSizeTextEdit::onTextChanged()
{
updateGeometry();
}
void AutoSizeTextEdit::onScrollBarRangeChanged(int min, int max)
{
Q_UNUSED(min)
Q_UNUSED(max)
StyleStorage::updateStyle(this);
}