diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d0ee7f..85aa98a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -159,6 +159,8 @@ add_subdirectory(ui) # Install the executable install(TARGETS squawk DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(FILES README.md DESTINATION ${CMAKE_INSTALL_DATADIR}/macaw.me/squawk) +install(FILES LICENSE.md DESTINATION ${CMAKE_INSTALL_DATADIR}/macaw.me/squawk) if (CMAKE_BUILD_TYPE STREQUAL "Release") if (APPLE) diff --git a/LICENSE.md b/LICENSE.md index 85c7c69..32b38d4 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -595,17 +595,17 @@ pointer to where the full notice is found. Copyright (C) - + 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 . diff --git a/core/main.cpp b/core/main.cpp index 7d3c3ab..4fbb1f7 100644 --- a/core/main.cpp +++ b/core/main.cpp @@ -54,7 +54,7 @@ int main(int argc, char *argv[]) QTranslator qtTranslator; qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); app.installTranslator(&qtTranslator); - + QTranslator myappTranslator; QStringList shares = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation); bool found = false; diff --git a/translations/CMakeLists.txt b/translations/CMakeLists.txt index 86d2a8c..eee4f98 100644 --- a/translations/CMakeLists.txt +++ b/translations/CMakeLists.txt @@ -6,6 +6,6 @@ set(TS_FILES ) qt5_add_translation(QM_FILES ${TS_FILES}) add_custom_target(translations ALL DEPENDS ${QM_FILES}) -install(FILES ${QM_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/squawk/l10n) +install(FILES ${QM_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/macaw.me/squawk/l10n) add_dependencies(${CMAKE_PROJECT_NAME} translations) diff --git a/ui/squawk.cpp b/ui/squawk.cpp index 4594c01..4c7320b 100644 --- a/ui/squawk.cpp +++ b/ui/squawk.cpp @@ -1098,12 +1098,11 @@ void Squawk::onAboutSquawkCalled() about = new About(); about->setAttribute(Qt::WA_DeleteOnClose); connect(about, &Settings::destroyed, this, &Squawk::onAboutSquawkClosed); - about->show(); } else { about->raise(); about->activateWindow(); - about->show(); } + about->show(); } void Squawk::onAboutSquawkClosed() diff --git a/ui/widgets/about.cpp b/ui/widgets/about.cpp index 3366284..3782a94 100644 --- a/ui/widgets/about.cpp +++ b/ui/widgets/about.cpp @@ -17,6 +17,7 @@ #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)); @@ -37,6 +38,71 @@ About::About(QWidget* parent): 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() = default; +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; +} diff --git a/ui/widgets/about.h b/ui/widgets/about.h index e28b362..1506b7f 100644 --- a/ui/widgets/about.h +++ b/ui/widgets/about.h @@ -20,6 +20,9 @@ #include #include #include +#include +#include +#include namespace Ui { @@ -36,6 +39,10 @@ public: About(QWidget* parent = nullptr); ~About(); +protected slots: + void onLicenseActivated(); + void onLicenseClosed(); + private: QScopedPointer m_ui; QWidget* license;