From c130cc63eaedde059771a2a3f227e5ebb9557c2c Mon Sep 17 00:00:00 2001 From: Lars Toenning Date: Tue, 11 Aug 2026 22:22:35 +0200 Subject: [PATCH] feat(ui): Show changelog Ref #408 --- CHANGELOG.md | 7 ++----- REUSE.toml | 6 ++++++ resources/CMakeLists.txt | 6 ++++++ src/gui/guiapplication.cpp | 42 ++++++++++++++++++++++++++++++++++++++ src/gui/guiapplication.h | 3 +++ 5 files changed, 59 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c57d60d48..522f70676 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,7 @@ - - # Changelog +--- + ## swift 0.16.0 (XX.XX.20XX) ### Features diff --git a/REUSE.toml b/REUSE.toml index eb6d58c34..256d1d6df 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -238,3 +238,9 @@ path = "src/sound/share/sounds/supervisormessage.wav" precedence = "aggregate" SPDX-FileCopyrightText = "Notification.wav by finn.appleton -- https://freesound.org/s/560880/ -- License: Creative Commons 0; Modified by swift contributors" SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "CHANGELOG.md" +precedence = "aggregate" +SPDX-FileCopyrightText = "Copyright (C) swift Project Community / Contributors" +SPDX-License-Identifier = "GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1" diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index 26d811245..b405c9f86 100644 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -8,4 +8,10 @@ add_custom_command(TARGET resources COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different share/ ${PROJECT_BINARY_DIR}/out/share/ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +add_custom_command(TARGET resources + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/CHANGELOG.md + ${PROJECT_BINARY_DIR}/out/share/CHANGELOG.md) + install(DIRECTORY share/ DESTINATION ${CMAKE_INSTALL_PREFIX}/share) +install(FILES ${PROJECT_SOURCE_DIR}/CHANGELOG.md DESTINATION ${CMAKE_INSTALL_PREFIX}/share) diff --git a/src/gui/guiapplication.cpp b/src/gui/guiapplication.cpp index 797a0e2f7..59ba6789a 100644 --- a/src/gui/guiapplication.cpp +++ b/src/gui/guiapplication.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -22,9 +23,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -765,6 +768,11 @@ namespace swift::gui Q_ASSERT_X(c, Q_FUNC_INFO, "Connect failed"); Q_UNUSED(c) + a = menu.addAction(QApplication::windowIcon(), "Changelog"); + c = connect(a, &QAction::triggered, this, [=, this]() { this->showChangelog(); }); + Q_ASSERT_X(c, Q_FUNC_INFO, "Connect failed"); + Q_UNUSED(c) + // https://joekuan.wordpress.com/2015/09/23/list-of-qt-icons/ a = menu.addAction(QApplication::style()->standardIcon(QStyle::SP_TitleBarMenuButton), "About Qt"); c = connect(a, &QAction::triggered, this, []() { QApplication::aboutQt(); }); @@ -780,6 +788,40 @@ namespace swift::gui QDesktopServices::openUrl(helpPage); } + void CGuiApplication::showChangelog() const + { + if (this->isShuttingDown()) { return; } + + QWidget *parent = CGuiApplication::mainApplicationWidget(); + if (!parent) { return; } + + const QString changelogPath = CFileUtils::appendFilePaths(CSwiftDirectories::shareDirectory(), "CHANGELOG.md"); + const QString changelog = CFileUtils::readFileToString(changelogPath); + if (changelog.isEmpty()) + { + QMessageBox::warning(parent, QGuiApplication::applicationDisplayName(), + QStringLiteral("Unable to load changelog from %1").arg(changelogPath)); + return; + } + + QDialog dialog(parent); + dialog.setWindowTitle(QStringLiteral("Changelog")); + dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint); + + auto *layout = new QVBoxLayout(&dialog); + auto *browser = new QTextBrowser(&dialog); + browser->setMarkdown(changelog); + browser->setOpenExternalLinks(true); + layout->addWidget(browser); + + auto *buttons = new QDialogButtonBox(QDialogButtonBox::Ok, &dialog); + connect(buttons, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); + layout->addWidget(buttons); + + dialog.resize(900, 700); + dialog.exec(); + } + const CStyleSheetUtility &CGuiApplication::getStyleSheetUtility() const { return m_styleSheetUtility; } QString CGuiApplication::getWidgetStyle() const diff --git a/src/gui/guiapplication.h b/src/gui/guiapplication.h index 97487bdb4..f9488f909 100644 --- a/src/gui/guiapplication.h +++ b/src/gui/guiapplication.h @@ -160,6 +160,9 @@ namespace swift::gui //! Show help page (online help) void showHelp(const QString &subpath = {}) const; + //! Show changelog popup + void showChangelog() const; + //! Style sheet handling const CStyleSheetUtility &getStyleSheetUtility() const;