// Squawk messenger. // Copyright (C) 2019 Yury Gubich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include "about.h" #include "ui_about.h" #include #include static const std::string QXMPP_VERSION_PATCH(std::to_string(QXMPP_VERSION & 0xff)); static const std::string QXMPP_VERSION_MINOR(std::to_string((QXMPP_VERSION & 0xff00) >> 8)); static const std::string QXMPP_VERSION_MAJOR(std::to_string(QXMPP_VERSION >> 16)); static const QString QXMPP_VERSION_STRING = QString::fromStdString(QXMPP_VERSION_MAJOR + "." + QXMPP_VERSION_MINOR + "." + QXMPP_VERSION_PATCH); About::About(QWidget* parent): QWidget(parent), m_ui(new Ui::About), license(nullptr) { m_ui->setupUi(this); m_ui->versionValue->setText(QApplication::applicationVersion()); m_ui->qtVersionValue->setText(qVersion()); m_ui->qtBuiltAgainstVersion->setText(tr("(built against %1)").arg(QT_VERSION_STR)); m_ui->qxmppVersionValue->setText(QXmppVersion()); m_ui->qxmppBuiltAgainstVersion->setText(tr("(built against %1)").arg(QXMPP_VERSION_STRING)); setWindowFlag(Qt::Tool); connect(m_ui->licenceLink, &QLabel::linkActivated, this, &About::onLicenseActivated); } About::~About() { if (license != nullptr) { license->deleteLater(); } }; void About::onLicenseActivated() { if (license == nullptr) { QFile file; bool found = false; QStringList shares = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation); for (const QString& path : shares) { file.setFileName(path + "/LICENSE.md"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { found = true; break; } } if (!found) { qDebug() << "couldn't read license file, bailing"; return; } license = new QWidget(); license->setWindowTitle(tr("License")); QVBoxLayout* layout = new QVBoxLayout(license); QLabel* text = new QLabel(license); QScrollArea* area = new QScrollArea(license); text->setTextFormat(Qt::MarkdownText); text->setWordWrap(true); text->setOpenExternalLinks(true); text->setMargin(5); area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); layout->addWidget(area); license->setAttribute(Qt::WA_DeleteOnClose); connect(license, &QWidget::destroyed, this, &About::onLicenseClosed); QTextStream in(&file); QString line; QString licenseText(""); while (!in.atEnd()) { line = in.readLine(); licenseText.append(line + "\n"); } text->setText(licenseText); file.close(); area->setWidget(text); } else { license->raise(); license->activateWindow(); } license->show(); } void About::onLicenseClosed() { license = nullptr; }