comparison src/gui/dialog/about.cc @ 330:e9d040e2045f

dialog/about: templateize this should be pretty useful for e.g. localization
author Paper <paper@paper.us.eu.org>
date Mon, 17 Jun 2024 05:16:57 -0400
parents 3b355fa948c7
children 92f63cf29faa
comparison
equal deleted inserted replaced
329:4aeffed717ef 330:e9d040e2045f
5 #include "gui/widgets/text.h" 5 #include "gui/widgets/text.h"
6 6
7 #include "pugixml.hpp" 7 #include "pugixml.hpp"
8 8
9 #include "utf8proc.h" 9 #include "utf8proc.h"
10
11 #include <fmt/core.h>
10 12
11 #include <QCoreApplication> 13 #include <QCoreApplication>
12 #include <QFont> 14 #include <QFont>
13 #include <QHBoxLayout> 15 #include <QHBoxLayout>
14 #include <QTextBrowser> 16 #include <QTextBrowser>
23 template<typename T, size_t N> 25 template<typename T, size_t N>
24 constexpr size_t array_size(T (&)[N]) { 26 constexpr size_t array_size(T (&)[N]) {
25 return N; 27 return N;
26 } 28 }
27 29
30 static constexpr semver::version fmt_version{FMT_VERSION / 10000, FMT_VERSION / 100 % 100, FMT_VERSION % 100};
28 static constexpr semver::version pugixml_version{PUGIXML_VERSION / 1000 % 10, PUGIXML_VERSION / 10 % 100, 31 static constexpr semver::version pugixml_version{PUGIXML_VERSION / 1000 % 10, PUGIXML_VERSION / 10 % 100,
29 PUGIXML_VERSION % 10}; 32 PUGIXML_VERSION % 10};
30 static constexpr semver::version json_version{NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, 33 static constexpr semver::version json_version{NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR,
31 NLOHMANN_JSON_VERSION_PATCH}; 34 NLOHMANN_JSON_VERSION_PATCH};
32 static constexpr semver::version semver_version{SEMVER_VERSION_MAJOR, SEMVER_VERSION_MINOR, SEMVER_VERSION_PATCH}; 35 static constexpr semver::version semver_version{SEMVER_VERSION_MAJOR, SEMVER_VERSION_MINOR, SEMVER_VERSION_PATCH};
36 static constexpr semver::version fugue_icons_version{3, 5, 6};
33 37
34 const char* get_curl_version() { 38 const char* get_curl_version() {
35 const curl_version_info_data* data = curl_version_info(CURLVERSION_NOW); 39 const curl_version_info_data* data = curl_version_info(CURLVERSION_NOW);
36 return data->version; 40 return data->version;
37 } 41 }
42
43 static constexpr std::string_view about_template =
44 "<body>"
45 "<h2 style=\"font-weight: normal;\"><strong>Minori</strong> v{}</h2>"
46 "<p><strong>Author:</strong><br>Paper <paper@paper.us.eu.org></p>"
47 "<p><strong>Third party components:</strong><br>"
48 "<a href=\"https://curl.se/\">libcurl v{}</a>, "
49 "<a href=\"https://p.yusukekamiyamane.com/\">Fugue Icons v{}</a>, "
50 "<a href=\"https://github.com/erengy/anitomy\">Anitomy</a>, "
51 "<a href=\"https://github.com/nlohmann/json\">JSON for Modern C++ v{}</a>, "
52 "<a href=\"https://pugixml.org/\">pugixml v{}</a>, "
53 "<a href=\"https://github.com/Neargye/semver\">semver v{}</a>, "
54 "<a href=\"http://juliastrings.github.io/utf8proc/\">utf8proc v{}</a>, "
55 "<a href=\"https://github.com/fmtlib/fmt\">fmt v{}</a>, "
56 "parts of <a href=\"https://github.com/erengy/anisthesia\">Anisthesia</a>"
57 "</p>"
58 "<span><strong>Special thanks:</strong></span>"
59 "<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; -qt-list-indent:0;\">"
60 "<li><strong>Eren Okka</strong> for creating <a href=\"https://taiga.moe/\">Taiga</a></li>"
61 "<li><strong>Alex Huszagh</strong> and <strong>Colin Duquesnoy</strong> for creating BreezeStyleSheets, on which the dark theme in this program is based off of</li>"
62 "<li><strong>Andy Brice</strong> for providing some sample code for detecting dark mode on Windows and macOS</li>"
63 "<li><strong>Manuel Wudka-Robles</strong> for providing information on getting open file descriptors on macOS</li>"
64 "</ul>"
65 "</body>";
38 66
39 AboutWindow::AboutWindow(QWidget* parent) : QDialog(parent) { 67 AboutWindow::AboutWindow(QWidget* parent) : QDialog(parent) {
40 setMinimumSize(641, 325); 68 setMinimumSize(641, 325);
41 setWindowTitle(tr("About Minori")); 69 setWindowTitle(tr("About Minori"));
42 setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); 70 setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
43 setAutoFillBackground(true); 71 setAutoFillBackground(true);
44 72
45 QHBoxLayout* layout = new QHBoxLayout(this); 73 QHBoxLayout* layout = new QHBoxLayout(this);
46 74
47 /* we have to generate this on-the-fly for localization purposes */ 75 std::string html = fmt::format(about_template, session.version.to_string(), get_curl_version(), fugue_icons_version.to_string(), json_version.to_string(), pugixml_version.to_string(), semver_version.to_string(), utf8proc_version(), fmt_version.to_string());
48 const QString html =
49 QString("<body>"
50 " <h2 style=\"font-weight: normal;\"><strong>Minori</strong> v" +
51 Strings::ToQString(session.version.to_string()) +
52 "</h2>"
53 " <p>"
54 " <strong>" +
55 tr("Author:") +
56 "</strong><br>"
57 " Paper (@mrpapersonic)"
58 " </p>"
59 " <p>"
60 " <strong>" +
61 tr("Third party components:") +
62 "</strong><br>"
63 "<a href=\"https://curl.se/\">libcurl v") +
64 get_curl_version() +
65 "</a>"
66 ", "
67 "<a href=\"https://p.yusukekamiyamane.com/\">Fugue Icons v3.5.6</a>"
68 ", "
69 "<a href=\"https://github.com/erengy/anitomy\">Anitomy</a>"
70 ", "
71 "<a href=\"https://github.com/nlohmann/json\">JSON for Modern C++ v" +
72 Strings::ToQString(json_version.to_string()) +
73 "</a>"
74 ", "
75 "<a href=\"https://pugixml.org/\">pugixml v" +
76 Strings::ToQString(pugixml_version.to_string()) +
77 "</a>"
78 ", "
79 "<a href=\"https://github.com/Neargye/semver\">semver v" +
80 Strings::ToQString(semver_version.to_string()) +
81 "</a>"
82 ", "
83 "<a href=\"http://juliastrings.github.io/utf8proc/\">utf8proc v" +
84 Strings::ToQString(utf8proc_version()) +
85 "</a>"
86 ", parts of "
87 "<a href=\"https://github.com/erengy/anisthesia\">Anisthesia</a>"
88 " </p>"
89 "<span>"
90 "<strong>" +
91 tr("Special thanks:") +
92 "</strong>"
93 "</span>"
94 " <ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; -qt-list-indent:0;\">"
95 " <li><strong>Eren Okka</strong> " +
96 tr("for creating <a href=\"https://taiga.moe/\">Taiga</a>") +
97 "</li>"
98 " <li><strong>Alex Huszagh</strong> " +
99 tr("and") + " <strong>Colin Duquesnoy</strong> " +
100 tr("for creating BreezeStyleSheets, on which the dark theme in this program is "
101 "based off of") +
102 "</li>"
103 " <li><strong>Andy Brice</strong> " +
104 tr("for providing some sample code for "
105 "detecting dark mode on Windows and macOS") +
106 "</li>"
107 " <li><strong>Manuel Wudka-Robles</strong> " +
108 tr("for providing information on "
109 "getting open file descriptors on macOS") +
110 "</li>"
111 " </ul>"
112 "</body>";
113 76
114 setBackgroundRole(QPalette::Base); 77 setBackgroundRole(QPalette::Base);
115 78
116 { 79 {
117 QTextBrowser* paragraph = new QTextBrowser(this); 80 QTextBrowser* paragraph = new QTextBrowser(this);
118 paragraph->setOpenExternalLinks(true); 81 paragraph->setOpenExternalLinks(true);
119 paragraph->setFrameShape(QFrame::NoFrame); 82 paragraph->setFrameShape(QFrame::NoFrame);
120 paragraph->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 83 paragraph->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
121 paragraph->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 84 paragraph->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
122 paragraph->setHtml(html); 85 paragraph->setHtml(Strings::ToQString(html));
123 86
124 layout->addWidget(paragraph); 87 layout->addWidget(paragraph);
125 } 88 }
126 } 89 }
127 90