112 lines
3.6 KiB
C++
112 lines
3.6 KiB
C++
// Squawk messenger.
|
|
// Copyright (C) 2019 Yury Gubich <blue@macaw.me>
|
|
//
|
|
// 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 <http://www.gnu.org/licenses/>.
|
|
|
|
#include "about.h"
|
|
#include "ui_about.h"
|
|
#include <QXmppGlobal.h>
|
|
#include <QDebug>
|
|
|
|
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):
|
|
QDialog(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::WindowStaysOnTopHint);
|
|
if (parent)
|
|
move(parent->window()->frameGeometry().topLeft() +
|
|
parent->window()->rect().center() - rect().center());
|
|
|
|
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;
|
|
}
|