comparison src/gui/dialog/about.cpp @ 51:75c804f713b2

window: add about window, *: use tr() when applicable (useful for i18n)
author Paper <mrpapersonic@gmail.com>
date Mon, 25 Sep 2023 20:29:26 -0400
parents
children 0c4138de2ea7
comparison
equal deleted inserted replaced
50:10868c3fb2be 51:75c804f713b2
1 #include "core/version.h"
2 #include "gui/widgets/text.h"
3 #include "gui/dialog/about.h"
4 #include "core/json.h"
5 #include <curl/curl.h>
6 #include <QFont>
7 #include <QTextCharFormat>
8 #include <QTextBrowser>
9 #include <QTextCursor>
10 #include <QHBoxLayout>
11
12 #define CONCAT_VERSION_NX(major, minor, patch) \
13 ("v" #major "." #minor "." #patch)
14
15 #define CONCAT_VERSION(major, minor, patch) \
16 CONCAT_VERSION_NX(major, minor, patch)
17
18 #define SET_TITLE_FONT(font, format, cursor) \
19 { \
20 font = cursor.charFormat().font(); \
21 font.setPointSize(10); \
22 format.setFont(font); \
23 cursor.setCharFormat(format); \
24 }
25
26 #define SET_PARAGRAPH_FONT(font, format, cursor) \
27 { \
28 font = cursor.charFormat().font(); \
29 font.setPointSize(8); \
30 format.setFont(font); \
31 cursor.setCharFormat(format); \
32 }
33
34 #define SET_FONT_BOLD(font, format, cursor) \
35 { \
36 font = cursor.charFormat().font(); \
37 font.setBold(true); \
38 format.setFont(font); \
39 cursor.setCharFormat(format); \
40 }
41
42 #define UNSET_FONT_BOLD(font, format, cursor) \
43 { \
44 font = cursor.charFormat().font(); \
45 font.setBold(false); \
46 format.setFont(font); \
47 cursor.setCharFormat(format); \
48 }
49
50 #define SET_FORMAT_HYPERLINK(format, cursor, link) \
51 { \
52 format.setAnchor(true); \
53 format.setAnchorHref(link); \
54 cursor.setCharFormat(format); \
55 }
56 #define UNSET_FORMAT_HYPERLINK(format, cursor) \
57 { \
58 format.setAnchor(false); \
59 format.setAnchorHref(""); \
60 cursor.setCharFormat(format); \
61 }
62
63 AboutWindow::AboutWindow(QWidget* parent) : QDialog(parent) {
64 setWindowTitle(tr("About Minori"));
65 setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
66 setLayout(new QHBoxLayout);
67
68 QPalette pal = QPalette();
69 pal.setColor(QPalette::Window, pal.color(QPalette::Base));
70 setPalette(pal);
71 setAutoFillBackground(true);
72
73 QFont font;
74 QTextCharFormat format;
75 QTextBrowser* paragraph = new QTextBrowser(this);
76 paragraph->setOpenExternalLinks(true);
77 QTextCursor cursor = paragraph->textCursor();
78 SET_TITLE_FONT(font, format, cursor);
79 SET_FONT_BOLD(font, format, cursor);
80 cursor.insertText("Minori");
81 UNSET_FONT_BOLD(font, format, cursor);
82 cursor.insertText(" " MINORI_VERSION);
83 SET_PARAGRAPH_FONT(font, format, cursor);
84 cursor.insertBlock();
85 cursor.insertBlock();
86 SET_FONT_BOLD(font, format, cursor);
87 cursor.insertText(tr("Author:"));
88 UNSET_FONT_BOLD(font, format, cursor);
89 cursor.insertBlock();
90 cursor.insertText(tr("Paper"));
91 cursor.insertBlock();
92 cursor.insertBlock();
93 SET_FONT_BOLD(font, format, cursor);
94 cursor.insertText(tr("Third party components:"));
95 UNSET_FONT_BOLD(font, format, cursor);
96 cursor.insertBlock();
97 SET_FORMAT_HYPERLINK(format, cursor, "https://github.com/nlohmann/json");
98 cursor.insertText(tr("JSON for Modern C++ ") + CONCAT_VERSION(NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH));
99 UNSET_FORMAT_HYPERLINK(format, cursor);
100 cursor.insertText(", ");
101 {
102 curl_version_info_data* data = curl_version_info(CURLVERSION_NOW);
103 SET_FORMAT_HYPERLINK(format, cursor, "https://curl.se/");
104 cursor.insertText(tr("libcurl v") + data->version);
105 UNSET_FORMAT_HYPERLINK(format, cursor);
106 cursor.insertText(", ");
107 }
108 SET_FORMAT_HYPERLINK(format, cursor, "https://p.yusukekamiyamane.com/");
109 cursor.insertText(tr("Fugue Icons ") + CONCAT_VERSION(3, 5, 6));
110 UNSET_FORMAT_HYPERLINK(format, cursor);
111 cursor.insertBlock();
112 cursor.insertBlock();
113 SET_FONT_BOLD(font, format, cursor);
114 cursor.insertText(tr("Links:"));
115 UNSET_FONT_BOLD(font, format, cursor);
116 cursor.insertBlock();
117 layout()->addWidget(paragraph);
118 }