Mercurial > minori
annotate src/gui/widgets/text.cc @ 229:adc20fa321c1
theme: force Fusion style on platforms other than Win32 or OS X
I was reluctant to do this, but most of the other styles just
look like pure shite regardless of whether I force a stylesheet
on them or not. KDE's style is actually hilariously bad paired
with my stylesheet, so I've decided to also make the stylesheet
Windows-specific as well, because that's really the only platform
where it makes sense in the first place.
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 10 Jan 2024 21:23:57 -0500 |
parents | 01d259b9c89f |
children | 4d461ef7d424 |
rev | line source |
---|---|
46 | 1 #include "gui/widgets/text.h" |
2 #include "core/session.h" | |
77 | 3 #include <QDebug> |
46 | 4 #include <QFrame> |
5 #include <QLabel> | |
6 #include <QTextBlock> | |
7 #include <QVBoxLayout> | |
8 | |
9 namespace TextWidgets { | |
10 | |
83 | 11 Header::Header(const QString& title, QWidget* parent) : QWidget(parent) { |
64 | 12 QVBoxLayout* layout = new QVBoxLayout(this); |
46 | 13 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); |
14 | |
15 static_text_title = new QLabel(title, this); | |
16 static_text_title->setTextFormat(Qt::PlainText); | |
183
01d259b9c89f
pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
17 |
01d259b9c89f
pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
18 { |
01d259b9c89f
pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
19 QFont font = static_text_title->font(); |
01d259b9c89f
pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
20 font.setWeight(QFont::Bold); |
01d259b9c89f
pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
21 static_text_title->setFont(font); |
01d259b9c89f
pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
22 } |
46 | 23 |
24 static_text_line = new QFrame(this); | |
25 static_text_line->setFrameShape(QFrame::HLine); | |
26 static_text_line->setFrameShadow(QFrame::Sunken); | |
27 static_text_line->setFixedHeight(2); | |
28 | |
64 | 29 layout->addWidget(static_text_title); |
30 layout->addWidget(static_text_line); | |
31 layout->setSpacing(0); | |
32 layout->setContentsMargins(0, 0, 0, 0); | |
46 | 33 } |
34 | |
83 | 35 void Header::SetText(const QString& text) { |
64 | 36 static_text_title->setText(text); |
83 | 37 updateGeometry(); |
46 | 38 } |
39 | |
75 | 40 /* inherits QPlainTextEdit and gives a much more reasonable minimum size */ |
83 | 41 Paragraph::Paragraph(const QString& text, QWidget* parent) : QPlainTextEdit(text, parent) { |
75 | 42 setTextInteractionFlags(Qt::TextBrowserInteraction); |
43 setFrameShape(QFrame::NoFrame); | |
44 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | |
45 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | |
46 | |
47 QPalette pal; | |
86 | 48 pal.setColor(QPalette::Base, Qt::transparent); |
75 | 49 setPalette(pal); |
50 | |
51 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); | |
52 } | |
53 | |
83 | 54 void Paragraph::SetText(const QString& text) { |
75 | 55 QTextDocument* document = new QTextDocument(this); |
56 document->setDocumentLayout(new QPlainTextDocumentLayout(document)); | |
57 document->setPlainText(text); | |
58 setDocument(document); | |
83 | 59 updateGeometry(); |
75 | 60 } |
61 | |
62 /* highly based upon... some stackoverflow answer for PyQt */ | |
63 QSize Paragraph::minimumSizeHint() const { | |
64 return QSize(0, 0); | |
65 } | |
66 | |
67 QSize Paragraph::sizeHint() const { | |
68 QTextDocument* doc = document(); | |
69 doc->adjustSize(); | |
70 long h = 0; | |
71 for (QTextBlock line = doc->begin(); line != doc->end(); line = line.next()) { | |
72 h += doc->documentLayout()->blockBoundingRect(line).height(); | |
73 } | |
74 return QSize(doc->size().width(), h); | |
75 } | |
76 | |
77 /* Equivalent to Paragraph(), but is only capable of showing one line. Only | |
97
18979b066284
animia/unix: fix a bunch of stuff that breaks OS X things
Paper <mrpapersonic@gmail.com>
parents:
87
diff
changeset
|
78 exists because with SelectableSection it will let you go |
18979b066284
animia/unix: fix a bunch of stuff that breaks OS X things
Paper <mrpapersonic@gmail.com>
parents:
87
diff
changeset
|
79 out of bounds and that looks really fugly for most things */ |
83 | 80 Line::Line(QWidget* parent) : QLineEdit(parent) { |
75 | 81 setFrame(false); |
82 setReadOnly(true); | |
87
4aef97f4d998
information: use QGridLayout please...
Paper <mrpapersonic@gmail.com>
parents:
86
diff
changeset
|
83 setCursor(Qt::IBeamCursor); |
75 | 84 |
85 QPalette pal; | |
105
6d8da6e64d61
theme: add dark stylesheet, make it actually usable
Paper <mrpapersonic@gmail.com>
parents:
102
diff
changeset
|
86 pal.setColor(QPalette::Window, Qt::transparent); |
86 | 87 pal.setColor(QPalette::Base, Qt::transparent); |
75 | 88 setPalette(pal); |
89 | |
90 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); | |
91 } | |
92 | |
83 | 93 Line::Line(const QString& text, QWidget* parent) : Line(parent) { |
94 SetText(text); | |
95 } | |
96 | |
97 void Line::SetText(const QString& text) { | |
98 setText(text); | |
99 setCursorPosition(0); /* displays left text first */ | |
100 } | |
101 | |
102 Title::Title(const QString& title, QWidget* parent) : Line(title, parent) { | |
75 | 103 QFont fnt(font()); |
104 fnt.setPixelSize(16); | |
105 setFont(fnt); | |
106 | |
107 QPalette pal(palette()); | |
105
6d8da6e64d61
theme: add dark stylesheet, make it actually usable
Paper <mrpapersonic@gmail.com>
parents:
102
diff
changeset
|
108 pal.setColor(QPalette::Text, pal.color(QPalette::Highlight)); |
75 | 109 setPalette(pal); |
110 } | |
111 | |
83 | 112 Section::Section(const QString& title, const QString& data, QWidget* parent) : QWidget(parent) { |
64 | 113 QVBoxLayout* layout = new QVBoxLayout(this); |
46 | 114 |
115 header = new Header(title, this); | |
116 | |
117 QWidget* content = new QWidget(this); | |
64 | 118 QHBoxLayout* content_layout = new QHBoxLayout(content); |
46 | 119 |
120 paragraph = new Paragraph(data, this); | |
121 paragraph->setTextInteractionFlags(Qt::NoTextInteraction); | |
122 paragraph->setAttribute(Qt::WidgetAttribute::WA_TransparentForMouseEvents); | |
123 paragraph->setWordWrapMode(QTextOption::NoWrap); | |
124 | |
64 | 125 content_layout->addWidget(paragraph); |
126 content_layout->setSpacing(0); | |
127 content_layout->setContentsMargins(0, 0, 0, 0); | |
46 | 128 content->setContentsMargins(12, 0, 0, 0); |
129 | |
64 | 130 layout->addWidget(header); |
131 layout->addWidget(paragraph); | |
132 layout->setSpacing(0); | |
133 layout->setContentsMargins(0, 0, 0, 0); | |
46 | 134 } |
135 | |
75 | 136 Header* Section::GetHeader() { |
46 | 137 return header; |
138 } | |
139 | |
75 | 140 Paragraph* Section::GetParagraph() { |
46 | 141 return paragraph; |
142 } | |
143 | |
83 | 144 LabelledSection::LabelledSection(const QString& title, const QString& label, const QString& data, QWidget* parent) : QWidget(parent) { |
64 | 145 QVBoxLayout* layout = new QVBoxLayout(this); |
46 | 146 |
147 header = new Header(title, this); | |
148 | |
149 // this is not accessible from the object because there's really | |
150 // no reason to make it accessible... | |
151 QWidget* content = new QWidget(this); | |
83 | 152 content->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); |
46 | 153 |
154 labels = new Paragraph(label, this); | |
155 labels->setTextInteractionFlags(Qt::NoTextInteraction); | |
156 labels->setAttribute(Qt::WidgetAttribute::WA_TransparentForMouseEvents); | |
157 labels->setWordWrapMode(QTextOption::NoWrap); | |
83 | 158 labels->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding); |
46 | 159 |
160 paragraph = new Paragraph(data, this); | |
161 paragraph->setTextInteractionFlags(Qt::NoTextInteraction); | |
162 paragraph->setAttribute(Qt::WidgetAttribute::WA_TransparentForMouseEvents); | |
163 paragraph->setWordWrapMode(QTextOption::NoWrap); | |
83 | 164 paragraph->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); |
46 | 165 |
50
10868c3fb2be
text.cpp: set paragraph width from document, labelled texts are now...
Paper <mrpapersonic@gmail.com>
parents:
49
diff
changeset
|
166 QHBoxLayout* content_layout = new QHBoxLayout(content); |
46 | 167 content_layout->addWidget(labels, 0, Qt::AlignTop); |
168 content_layout->addWidget(paragraph, 0, Qt::AlignTop); | |
50
10868c3fb2be
text.cpp: set paragraph width from document, labelled texts are now...
Paper <mrpapersonic@gmail.com>
parents:
49
diff
changeset
|
169 content_layout->setSpacing(20); |
62 | 170 content_layout->setContentsMargins(0, 0, 0, 0); |
46 | 171 |
172 content->setContentsMargins(12, 0, 0, 0); | |
173 | |
64 | 174 layout->addWidget(header); |
175 layout->addWidget(content); | |
176 layout->setSpacing(0); | |
177 layout->setContentsMargins(0, 0, 0, 0); | |
46 | 178 } |
179 | |
75 | 180 Header* LabelledSection::GetHeader() { |
46 | 181 return header; |
182 } | |
183 | |
75 | 184 Paragraph* LabelledSection::GetLabels() { |
46 | 185 return labels; |
186 } | |
187 | |
75 | 188 Paragraph* LabelledSection::GetParagraph() { |
46 | 189 return paragraph; |
190 } | |
191 | |
83 | 192 SelectableSection::SelectableSection(const QString& title, const QString& data, QWidget* parent) : QWidget(parent) { |
64 | 193 QVBoxLayout* layout = new QVBoxLayout(this); |
46 | 194 |
195 header = new Header(title, this); | |
196 | |
197 QWidget* content = new QWidget(this); | |
64 | 198 QHBoxLayout* content_layout = new QHBoxLayout(content); |
46 | 199 |
200 paragraph = new Paragraph(data, content); | |
201 | |
64 | 202 content_layout->addWidget(paragraph); |
203 content_layout->setSpacing(0); | |
102 | 204 content_layout->setContentsMargins(12, 0, 0, 0); |
205 content->setContentsMargins(0, 0, 0, 0); | |
46 | 206 |
64 | 207 layout->addWidget(header); |
208 layout->addWidget(content); | |
209 layout->setSpacing(0); | |
210 layout->setContentsMargins(0, 0, 0, 0); | |
46 | 211 } |
212 | |
75 | 213 Header* SelectableSection::GetHeader() { |
46 | 214 return header; |
215 } | |
216 | |
75 | 217 Paragraph* SelectableSection::GetParagraph() { |
46 | 218 return paragraph; |
219 } | |
220 | |
83 | 221 OneLineSection::OneLineSection(const QString& title, const QString& text, QWidget* parent) : QWidget(parent) { |
75 | 222 QVBoxLayout* layout = new QVBoxLayout(this); |
223 | |
224 header = new Header(title, this); | |
46 | 225 |
75 | 226 QWidget* content = new QWidget(this); |
227 QHBoxLayout* content_layout = new QHBoxLayout(content); | |
228 | |
229 line = new Line(text, content); | |
46 | 230 |
75 | 231 content_layout->addWidget(line); |
232 content_layout->setSpacing(0); | |
233 content_layout->setContentsMargins(0, 0, 0, 0); | |
234 content->setContentsMargins(12, 0, 0, 0); | |
46 | 235 |
75 | 236 layout->addWidget(header); |
237 layout->addWidget(content); | |
238 layout->setSpacing(0); | |
239 layout->setContentsMargins(0, 0, 0, 0); | |
64 | 240 } |
241 | |
75 | 242 Header* OneLineSection::GetHeader() { |
243 return header; | |
46 | 244 } |
245 | |
75 | 246 Line* OneLineSection::GetLine() { |
247 return line; | |
46 | 248 } |
249 | |
250 } // namespace TextWidgets | |
251 | |
252 #include "gui/widgets/moc_text.cpp" |