From c1aa34607f4f783378ef6177c3b4eca9bcb14a23 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 22 Apr 2023 23:31:23 -0500 Subject: [PATCH] Add Update Dialog --- scwx-qt/scwx-qt.cmake | 9 +- scwx-qt/source/scwx/qt/ui/update_dialog.cpp | 71 +++++++ scwx-qt/source/scwx/qt/ui/update_dialog.hpp | 43 ++++ scwx-qt/source/scwx/qt/ui/update_dialog.ui | 214 ++++++++++++++++++++ 4 files changed, 334 insertions(+), 3 deletions(-) create mode 100644 scwx-qt/source/scwx/qt/ui/update_dialog.cpp create mode 100644 scwx-qt/source/scwx/qt/ui/update_dialog.hpp create mode 100644 scwx-qt/source/scwx/qt/ui/update_dialog.ui diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index d5143fc6..15d09a62 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -145,7 +145,8 @@ set(HDR_UI source/scwx/qt/ui/about_dialog.hpp source/scwx/qt/ui/level2_settings_widget.hpp source/scwx/qt/ui/level3_products_widget.hpp source/scwx/qt/ui/radar_site_dialog.hpp - source/scwx/qt/ui/settings_dialog.hpp) + source/scwx/qt/ui/settings_dialog.hpp + source/scwx/qt/ui/update_dialog.hpp) set(SRC_UI source/scwx/qt/ui/about_dialog.cpp source/scwx/qt/ui/alert_dialog.cpp source/scwx/qt/ui/alert_dock_widget.cpp @@ -156,13 +157,15 @@ set(SRC_UI source/scwx/qt/ui/about_dialog.cpp source/scwx/qt/ui/level2_settings_widget.cpp source/scwx/qt/ui/level3_products_widget.cpp source/scwx/qt/ui/radar_site_dialog.cpp - source/scwx/qt/ui/settings_dialog.cpp) + source/scwx/qt/ui/settings_dialog.cpp + source/scwx/qt/ui/update_dialog.cpp) set(UI_UI source/scwx/qt/ui/about_dialog.ui source/scwx/qt/ui/alert_dialog.ui source/scwx/qt/ui/alert_dock_widget.ui source/scwx/qt/ui/imgui_debug_dialog.ui source/scwx/qt/ui/radar_site_dialog.ui - source/scwx/qt/ui/settings_dialog.ui) + source/scwx/qt/ui/settings_dialog.ui + source/scwx/qt/ui/update_dialog.ui) set(HDR_UTIL source/scwx/qt/util/color.hpp source/scwx/qt/util/file.hpp source/scwx/qt/util/font.hpp diff --git a/scwx-qt/source/scwx/qt/ui/update_dialog.cpp b/scwx-qt/source/scwx/qt/ui/update_dialog.cpp new file mode 100644 index 00000000..93b3ac0a --- /dev/null +++ b/scwx-qt/source/scwx/qt/ui/update_dialog.cpp @@ -0,0 +1,71 @@ +#include "update_dialog.hpp" +#include "ui_update_dialog.h" +#include +#include + +#include +#include + +namespace scwx +{ +namespace qt +{ +namespace ui +{ + +class UpdateDialogImpl +{ +public: + explicit UpdateDialogImpl() = default; + ~UpdateDialogImpl() = default; + + std::string downloadUrl_ {}; +}; + +UpdateDialog::UpdateDialog(QWidget* parent) : + QDialog(parent), + p {std::make_unique()}, + ui(new Ui::UpdateDialog) +{ + ui->setupUi(this); + + int titleFontId = + manager::ResourceManager::FontId(types::Font::din1451alt_g); + QString titleFontFamily = + QFontDatabase::applicationFontFamilies(titleFontId).at(0); + QFont titleFont(titleFontFamily, 12); + ui->bannerLabel->setFont(titleFont); + + ui->releaseNotesText->setOpenExternalLinks(true); +} + +UpdateDialog::~UpdateDialog() +{ + delete ui; +} + +void UpdateDialog::UpdateReleaseInfo(const std::string& latestVersion, + const types::gh::Release& latestRelease) +{ + ui->versionLabel->setText(tr("Supercell Wx v%1 is now available. You are " + "currently running version %2.") + .arg(latestVersion.c_str()) + .arg(main::kVersionString_.c_str())); + + ui->releaseNotesText->setMarkdown( + QString::fromStdString(latestRelease.body_)); + + p->downloadUrl_ = latestRelease.htmlUrl_; +} + +void UpdateDialog::on_downloadButton_clicked() +{ + if (!p->downloadUrl_.empty()) + { + QDesktopServices::openUrl(QUrl {QString::fromStdString(p->downloadUrl_)}); + } +} + +} // namespace ui +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/ui/update_dialog.hpp b/scwx-qt/source/scwx/qt/ui/update_dialog.hpp new file mode 100644 index 00000000..0df39648 --- /dev/null +++ b/scwx-qt/source/scwx/qt/ui/update_dialog.hpp @@ -0,0 +1,43 @@ +#pragma once + +#include + +#include + +namespace Ui +{ +class UpdateDialog; +} + +namespace scwx +{ +namespace qt +{ +namespace ui +{ + +class UpdateDialogImpl; + +class UpdateDialog : public QDialog +{ + Q_OBJECT + +public: + explicit UpdateDialog(QWidget* parent = nullptr); + ~UpdateDialog(); + + void UpdateReleaseInfo(const std::string& latestVersion, + const types::gh::Release& latestRelease); + +private slots: + void on_downloadButton_clicked(); + +private: + friend UpdateDialogImpl; + std::unique_ptr p; + Ui::UpdateDialog* ui; +}; + +} // namespace ui +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/ui/update_dialog.ui b/scwx-qt/source/scwx/qt/ui/update_dialog.ui new file mode 100644 index 00000000..3ecb2ef2 --- /dev/null +++ b/scwx-qt/source/scwx/qt/ui/update_dialog.ui @@ -0,0 +1,214 @@ + + + UpdateDialog + + + + 0 + 0 + 400 + 300 + + + + Update Available + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 64 + 64 + + + + + + + :/res/icons/scwx-256.png + + + true + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + A new version of Supercell Wx is available! + + + true + + + + + + + Supercell Wx X.Y.Z is now available. You are running version X.Y.Z. + + + true + + + + + + + + + + + + + Release Notes: + + + + + + + + + + &Enable Update Notifications + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Download + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + + + + + + + buttonBox + accepted() + UpdateDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + UpdateDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +