From 411d2a38320ca068a8cb86f4f1accae73d37c413 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Tue, 7 Nov 2023 06:00:39 -0600 Subject: [PATCH] Initial setup wizard contents --- scwx-qt/res/icons/scwx-64.png | Bin 0 -> 21854 bytes scwx-qt/scwx-qt.qrc | 1 + scwx-qt/source/scwx/qt/main/main.cpp | 11 +++++ .../source/scwx/qt/ui/setup/finish_page.cpp | 19 ++++++++ scwx-qt/source/scwx/qt/ui/setup/map_page.cpp | 2 + .../source/scwx/qt/ui/setup/setup_wizard.cpp | 42 ++++++++++++++++++ .../source/scwx/qt/ui/setup/setup_wizard.hpp | 9 ++++ .../source/scwx/qt/ui/setup/welcome_page.cpp | 18 ++++++++ 8 files changed, 102 insertions(+) create mode 100644 scwx-qt/res/icons/scwx-64.png diff --git a/scwx-qt/res/icons/scwx-64.png b/scwx-qt/res/icons/scwx-64.png new file mode 100644 index 0000000000000000000000000000000000000000..92163b92688b733c244224e9681fd49325dea51b GIT binary patch literal 21854 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/fonts/din1451alt.ttf res/fonts/din1451alt_g.ttf res/fonts/Inconsolata-Regular.ttf + res/icons/scwx-64.png res/icons/scwx-256.ico res/icons/scwx-256.png res/icons/font-awesome-6/angle-down-solid.svg diff --git a/scwx-qt/source/scwx/qt/main/main.cpp b/scwx-qt/source/scwx/qt/main/main.cpp index 4c0bdac4..121766c2 100644 --- a/scwx-qt/source/scwx/qt/main/main.cpp +++ b/scwx-qt/source/scwx/qt/main/main.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +71,16 @@ int main(int argc, char* argv[]) // Initialize application scwx::qt::config::RadarSite::Initialize(); scwx::qt::manager::SettingsManager::Instance().Initialize(); + + // Run initial setup if required + if (scwx::qt::ui::setup::SetupWizard::IsSetupRequired()) + { + scwx::qt::ui::setup::SetupWizard w; + w.show(); + a.exec(); + } + + // Run further application initialization scwx::qt::manager::ResourceManager::Initialize(); // Run Qt main loop diff --git a/scwx-qt/source/scwx/qt/ui/setup/finish_page.cpp b/scwx-qt/source/scwx/qt/ui/setup/finish_page.cpp index 6b86f469..a4d62001 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/finish_page.cpp +++ b/scwx-qt/source/scwx/qt/ui/setup/finish_page.cpp @@ -1,5 +1,8 @@ #include +#include +#include + namespace scwx { namespace qt @@ -14,11 +17,27 @@ class FinishPage::Impl public: explicit Impl() = default; ~Impl() = default; + + QVBoxLayout* layout_ {nullptr}; + QLabel* finishLabel_ {nullptr}; }; FinishPage::FinishPage(QWidget* parent) : QWizardPage(parent), p {std::make_shared()} { + setTitle(tr("Setup Complete")); + setSubTitle(tr("Supercell Wx setup is complete!")); + + p->finishLabel_ = + new QLabel(tr("Supercell Wx setup is now complete and ready for use. " + "Additional settings may be configured after startup. For " + "further information, please see the User Manual from the " + "Help menu, or join the Discord server for help.")); + p->finishLabel_->setWordWrap(true); + + p->layout_ = new QVBoxLayout(this); + p->layout_->addWidget(p->finishLabel_); + setLayout(p->layout_); } FinishPage::~FinishPage() = default; diff --git a/scwx-qt/source/scwx/qt/ui/setup/map_page.cpp b/scwx-qt/source/scwx/qt/ui/setup/map_page.cpp index d586d3fa..e5d9af3b 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/map_page.cpp +++ b/scwx-qt/source/scwx/qt/ui/setup/map_page.cpp @@ -19,6 +19,8 @@ public: MapPage::MapPage(QWidget* parent) : QWizardPage(parent), p {std::make_shared()} { + setTitle(tr("Map Configuration")); + setSubTitle(tr("Configure the Supercell Wx map provider and basic layout.")); } MapPage::~MapPage() = default; diff --git a/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.cpp b/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.cpp index e2980a4a..f4253e5a 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.cpp +++ b/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.cpp @@ -1,4 +1,11 @@ #include +#include +#include +#include +#include + +#include +#include namespace scwx { @@ -19,10 +26,45 @@ public: SetupWizard::SetupWizard(QWidget* parent) : QWizard(parent), p {std::make_shared()} { + setWindowTitle(tr("Supercell Wx Setup")); + setPixmap(QWizard::LogoPixmap, QPixmap(":/res/icons/scwx-64.png")); + + setOption(QWizard::WizardOption::IndependentPages); + setOption(QWizard::WizardOption::NoBackButtonOnStartPage); + setOption(QWizard::WizardOption::NoCancelButton); + setOption(QWizard::WizardOption::HaveHelpButton); + + setPage(static_cast(Page::Welcome), new WelcomePage(this)); + setPage(static_cast(Page::Map), new MapPage(this)); + setPage(static_cast(Page::Finish), new FinishPage(this)); + +#if !defined(Q_OS_MAC) + setWizardStyle(QWizard::WizardStyle::ModernStyle); +#endif + + connect(this, + &QWizard::helpRequested, + this, + []() { + QDesktopServices::openUrl( + QUrl {"https://supercell-wx.readthedocs.io/"}); + }); } SetupWizard::~SetupWizard() = default; +bool SetupWizard::IsSetupRequired() +{ + auto& generalSettings = settings::GeneralSettings::Instance(); + + std::string mapboxApiKey = generalSettings.mapbox_api_key().GetValue(); + std::string maptilerApiKey = generalSettings.maptiler_api_key().GetValue(); + + // Setup is required if either API key is empty, or contains a single + // character ("?") + return (mapboxApiKey.size() <= 1 && maptilerApiKey.size() <= 1); +} + } // namespace setup } // namespace ui } // namespace qt diff --git a/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.hpp b/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.hpp index ba753d2b..f4c5e9e8 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.hpp +++ b/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.hpp @@ -14,9 +14,18 @@ namespace setup class SetupWizard : public QWizard { public: + enum class Page : int + { + Welcome = 0, + Map, + Finish + }; + explicit SetupWizard(QWidget* parent = nullptr); ~SetupWizard(); + static bool IsSetupRequired(); + private: class Impl; std::shared_ptr p; diff --git a/scwx-qt/source/scwx/qt/ui/setup/welcome_page.cpp b/scwx-qt/source/scwx/qt/ui/setup/welcome_page.cpp index 76708d90..c2857980 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/welcome_page.cpp +++ b/scwx-qt/source/scwx/qt/ui/setup/welcome_page.cpp @@ -1,5 +1,8 @@ #include +#include +#include + namespace scwx { namespace qt @@ -14,11 +17,26 @@ class WelcomePage::Impl public: explicit Impl() = default; ~Impl() = default; + + QVBoxLayout* layout_ {nullptr}; + QLabel* welcomeLabel_ {nullptr}; }; WelcomePage::WelcomePage(QWidget* parent) : QWizardPage(parent), p {std::make_shared()} { + setTitle(tr("Introduction")); + setSubTitle(tr("Welcome to Supercell Wx!")); + + p->welcomeLabel_ = + new QLabel(tr("Welcome to Supercell Wx. This wizard will guide you " + "through configuring Supercell Wx for initial use, as well " + "as introduce you to any new features.")); + p->welcomeLabel_->setWordWrap(true); + + p->layout_ = new QVBoxLayout(this); + p->layout_->addWidget(p->welcomeLabel_); + setLayout(p->layout_); } WelcomePage::~WelcomePage() = default;