Mercurial > minori
diff src/gui/dialog/licenses.cc @ 339:eac06513db86
dialog/about: add licenses button
otherwise we wouldn't be complying with most of the libraries
and external software we use
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 19 Jun 2024 14:02:11 -0400 |
parents | |
children | a0aa8c8c4307 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gui/dialog/licenses.cc Wed Jun 19 14:02:11 2024 -0400 @@ -0,0 +1,150 @@ +#include "gui/dialog/licenses.h" +#include "core/json.h" +#include "core/session.h" +#include "core/strings.h" +#include "gui/widgets/text.h" + +#include "pugixml.hpp" + +#include "utf8proc.h" + +#include <fmt/core.h> + +#include <QCoreApplication> +#include <QFont> +#include <QHBoxLayout> +#include <QTabWidget> +#include <QTextBrowser> +#include <QTextCharFormat> +#include <QTextCursor> + +#include <curl/curl.h> +#ifdef WIN32 +# include "sys/win32/dark_theme.h" +#endif + +static QWidget *create_license_widget(QWidget *parent, const std::string& license) { + QTextBrowser* paragraph = new QTextBrowser(parent); + paragraph->setFrameShape(QFrame::NoFrame); + paragraph->setPlainText(Strings::ToQString(license)); + paragraph->setFont(QFont("monospace")); + return paragraph; +} + +LicensesWindow::LicensesWindow(QWidget* parent) : QDialog(parent) { + resize(641, 500); + setWindowTitle(tr("About Minori")); + setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); + setAutoFillBackground(true); + + QHBoxLayout* layout = new QHBoxLayout(this); + + setBackgroundRole(QPalette::Base); + + QTabWidget *tab_widget = new QTabWidget(this); + + layout->addWidget(tab_widget); + + do { + QFile f(":/licenses/LICENSE.minori"); + if (!f.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + tab_widget->addTab(create_license_widget(this, Strings::ToUtf8String(f.readAll())), tr("Minori")); + } while (0); + + do { + QFile f(":/licenses/LICENSE.MIT.animone"); + QFile b(":/licenses/LICENSE.BSD.animone"); + if (!f.exists() || !b.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + b.open(QFile::ReadOnly | QFile::Text); + + std::string mit = Strings::ToUtf8String(f.readAll()); + std::string bsd = Strings::ToUtf8String(b.readAll()); + + QWidget *dual = new QWidget(this); + QVBoxLayout *dual_layout = new QVBoxLayout(dual); + + QLabel *dual_notice = new QLabel(tr("Animone was originally forked from Anisthesia, where any changes divergent from Anisthesia are now under a different license. Both the licenses for Animone and Anisthesia are provided below, respectfully:"), dual); + dual_notice->setWordWrap(true); + dual_layout->addWidget(dual_notice); + dual_layout->addWidget(create_license_widget(dual, bsd)); + dual_layout->addWidget(create_license_widget(dual, mit)); + + tab_widget->addTab(dual, tr("Animone")); + } while (0); + + do { + QFile f(":/licenses/LICENSE.anitomy"); + if (!f.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + tab_widget->addTab(create_license_widget(this, Strings::ToUtf8String(f.readAll())), tr("Anitomy")); + } while (0); + + do { + QFile f(":/licenses/LICENSE.fmt"); + if (!f.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + tab_widget->addTab(create_license_widget(this, Strings::ToUtf8String(f.readAll())), tr("fmt")); + } while (0); + + do { + QFile f(":/licenses/LICENSE.nlohmann"); + if (!f.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + tab_widget->addTab(create_license_widget(this, Strings::ToUtf8String(f.readAll())), tr("JSON for Modern C++")); + } while (0); + + do { + QFile f(":/licenses/LICENSE.pugixml"); + if (!f.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + tab_widget->addTab(create_license_widget(this, Strings::ToUtf8String(f.readAll())), tr("pugixml")); + } while (0); + + do { + QFile f(":/licenses/LICENSE.semver"); + if (!f.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + tab_widget->addTab(create_license_widget(this, Strings::ToUtf8String(f.readAll())), tr("semver")); + } while (0); + + do { + QFile f(":/licenses/LICENSE.toml11"); + if (!f.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + tab_widget->addTab(create_license_widget(this, Strings::ToUtf8String(f.readAll())), tr("toml11")); + } while (0); + + do { + QFile f(":/licenses/LICENSE.utf8proc"); + if (!f.exists()) + break; + + f.open(QFile::ReadOnly | QFile::Text); + tab_widget->addTab(create_license_widget(this, Strings::ToUtf8String(f.readAll())), tr("utf8proc")); + } while (0); +} + +void LicensesWindow::showEvent(QShowEvent* event) { + QDialog::showEvent(event); +#ifdef WIN32 + win32::SetTitleBarsToBlack(session.config.theme.IsInDarkTheme()); +#endif +}