46
|
1 #include "gui/widgets/text.h"
|
|
2 #include "core/session.h"
|
|
3 #include <QFrame>
|
|
4 #include <QLabel>
|
|
5 #include <QPixmap>
|
|
6 #include <QTextBlock>
|
|
7 #include <QVBoxLayout>
|
|
8
|
|
9 namespace TextWidgets {
|
|
10
|
|
11 Header::Header(QString title, QWidget* parent) : QWidget(parent) {
|
|
12 setLayout(new QVBoxLayout);
|
|
13 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
|
|
14
|
|
15 static_text_title = new QLabel(title, this);
|
|
16 static_text_title->setTextFormat(Qt::PlainText);
|
|
17 QFont font = static_text_title->font();
|
|
18 font.setWeight(QFont::Bold);
|
|
19 static_text_title->setFont(font);
|
|
20 static_text_title->setFixedHeight(16);
|
|
21
|
|
22 static_text_line = new QFrame(this);
|
|
23 static_text_line->setFrameShape(QFrame::HLine);
|
|
24 static_text_line->setFrameShadow(QFrame::Sunken);
|
|
25 static_text_line->setFixedHeight(2);
|
|
26
|
|
27 layout()->addWidget(static_text_title);
|
|
28 layout()->addWidget(static_text_line);
|
|
29 layout()->setSpacing(0);
|
|
30 layout()->setMargin(0);
|
|
31 }
|
|
32
|
|
33 void Header::SetTitle(QString title) {
|
|
34 static_text_title->setText(title);
|
|
35 }
|
|
36
|
|
37 TextParagraph::TextParagraph(QString title, QString data, QWidget* parent) : QWidget(parent) {
|
|
38 setLayout(new QVBoxLayout);
|
|
39
|
|
40 header = new Header(title, this);
|
|
41
|
|
42 QWidget* content = new QWidget(this);
|
|
43 content->setLayout(new QHBoxLayout);
|
|
44
|
|
45 paragraph = new Paragraph(data, this);
|
|
46 paragraph->setTextInteractionFlags(Qt::NoTextInteraction);
|
|
47 paragraph->setAttribute(Qt::WidgetAttribute::WA_TransparentForMouseEvents);
|
|
48 paragraph->setWordWrapMode(QTextOption::NoWrap);
|
|
49
|
|
50 content->layout()->addWidget(paragraph);
|
|
51 content->layout()->setSpacing(0);
|
|
52 content->layout()->setMargin(0);
|
|
53 content->setContentsMargins(12, 0, 0, 0);
|
|
54
|
|
55 layout()->addWidget(header);
|
|
56 layout()->addWidget(paragraph);
|
|
57 layout()->setSpacing(0);
|
|
58 layout()->setMargin(0);
|
|
59 }
|
|
60
|
|
61 Header* TextParagraph::GetHeader() {
|
|
62 return header;
|
|
63 }
|
|
64
|
|
65 Paragraph* TextParagraph::GetParagraph() {
|
|
66 return paragraph;
|
|
67 }
|
|
68
|
|
69 LabelledTextParagraph::LabelledTextParagraph(QString title, QString label, QString data, QWidget* parent)
|
|
70 : QWidget(parent) {
|
|
71 setLayout(new QVBoxLayout);
|
|
72
|
|
73 header = new Header(title, this);
|
|
74
|
|
75 // this is not accessible from the object because there's really
|
|
76 // no reason to make it accessible...
|
|
77 QWidget* content = new QWidget(this);
|
|
78 content->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
79
|
|
80 labels = new Paragraph(label, this);
|
|
81 labels->setTextInteractionFlags(Qt::NoTextInteraction);
|
|
82 labels->setAttribute(Qt::WidgetAttribute::WA_TransparentForMouseEvents);
|
|
83 labels->setWordWrapMode(QTextOption::NoWrap);
|
|
84 labels->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
85 labels->setFixedWidth(123);
|
|
86
|
|
87 paragraph = new Paragraph(data, this);
|
|
88 paragraph->setTextInteractionFlags(Qt::NoTextInteraction);
|
|
89 paragraph->setAttribute(Qt::WidgetAttribute::WA_TransparentForMouseEvents);
|
|
90 paragraph->setWordWrapMode(QTextOption::NoWrap);
|
|
91
|
|
92 QHBoxLayout* content_layout = new QHBoxLayout;
|
|
93 content_layout->addWidget(labels, 0, Qt::AlignTop);
|
|
94 content_layout->addWidget(paragraph, 0, Qt::AlignTop);
|
|
95 content_layout->setSpacing(0);
|
|
96 content_layout->setMargin(0);
|
|
97 content->setLayout(content_layout);
|
|
98
|
|
99 content->setContentsMargins(12, 0, 0, 0);
|
|
100
|
|
101 layout()->addWidget(header);
|
|
102 layout()->addWidget(content);
|
|
103 layout()->setSpacing(0);
|
|
104 layout()->setMargin(0);
|
|
105 }
|
|
106
|
|
107 Header* LabelledTextParagraph::GetHeader() {
|
|
108 return header;
|
|
109 }
|
|
110
|
|
111 Paragraph* LabelledTextParagraph::GetLabels() {
|
|
112 return labels;
|
|
113 }
|
|
114
|
|
115 Paragraph* LabelledTextParagraph::GetParagraph() {
|
|
116 return paragraph;
|
|
117 }
|
|
118
|
|
119 SelectableTextParagraph::SelectableTextParagraph(QString title, QString data, QWidget* parent) : QWidget(parent) {
|
|
120 setLayout(new QVBoxLayout);
|
|
121
|
|
122 header = new Header(title, this);
|
|
123
|
|
124 QWidget* content = new QWidget(this);
|
|
125 content->setLayout(new QHBoxLayout);
|
|
126
|
|
127 paragraph = new Paragraph(data, content);
|
|
128
|
|
129 content->layout()->addWidget(paragraph);
|
|
130 content->layout()->setSpacing(0);
|
|
131 content->layout()->setMargin(0);
|
|
132 content->setContentsMargins(12, 0, 0, 0);
|
|
133
|
|
134 layout()->addWidget(header);
|
|
135 layout()->addWidget(content);
|
|
136 layout()->setSpacing(0);
|
|
137 layout()->setMargin(0);
|
|
138 }
|
|
139
|
|
140 Header* SelectableTextParagraph::GetHeader() {
|
|
141 return header;
|
|
142 }
|
|
143
|
|
144 Paragraph* SelectableTextParagraph::GetParagraph() {
|
|
145 return paragraph;
|
|
146 }
|
|
147
|
|
148 /* inherits QPlainTextEdit and gives a much more reasonable minimum size */
|
|
149 Paragraph::Paragraph(QString text, QWidget* parent) : QPlainTextEdit(text, parent) {
|
|
150 setReadOnly(true);
|
|
151 setTextInteractionFlags(Qt::TextBrowserInteraction);
|
|
152 setFrameShape(QFrame::NoFrame);
|
|
153 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
154 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
155
|
|
156 QPalette pal;
|
|
157 pal.setColor(QPalette::Window, QColor(0, 0, 0, 0));
|
|
158 setPalette(pal);
|
|
159
|
|
160 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
|
161 }
|
|
162
|
|
163 /* highly based upon... some stackoverflow answer for PyQt */
|
|
164 QSize Paragraph::minimumSizeHint() const {
|
|
165 QTextDocument* doc = document();
|
|
166 long h = (long)(blockBoundingGeometry(doc->findBlockByNumber(doc->blockCount() - 1)).bottom() +
|
|
167 (2 * doc->documentMargin()));
|
|
168 return QSize(QPlainTextEdit::sizeHint().width(), h);
|
|
169 }
|
|
170
|
|
171 QSize Paragraph::sizeHint() const {
|
|
172 return minimumSizeHint();
|
|
173 }
|
|
174
|
|
175 /* this is still actually useful, so we'll keep it */
|
|
176 void SetPlainTextEditData(QPlainTextEdit* text_edit, QString data) {
|
|
177 QTextDocument* document = new QTextDocument(text_edit);
|
|
178 document->setDocumentLayout(new QPlainTextDocumentLayout(document));
|
|
179 document->setPlainText(data);
|
|
180 text_edit->setDocument(document);
|
|
181 }
|
|
182
|
|
183 } // namespace TextWidgets
|
|
184
|
|
185 #include "gui/widgets/moc_text.cpp"
|