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
+}