From 7aa5190476f31ac48239b6d967d0b8f24009b088 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Wed, 8 Nov 2023 06:56:09 -0600 Subject: [PATCH] Split out map page into map provider and map layout, provider initial content --- scwx-qt/scwx-qt.cmake | 6 +- .../{map_page.cpp => map_layout_page.cpp} | 12 +- .../{map_page.hpp => map_layout_page.hpp} | 6 +- .../scwx/qt/ui/setup/map_provider_page.cpp | 207 ++++++++++++++++++ .../scwx/qt/ui/setup/map_provider_page.hpp | 28 +++ .../source/scwx/qt/ui/setup/setup_wizard.cpp | 6 +- .../source/scwx/qt/ui/setup/setup_wizard.hpp | 3 +- 7 files changed, 254 insertions(+), 14 deletions(-) rename scwx-qt/source/scwx/qt/ui/setup/{map_page.cpp => map_layout_page.cpp} (51%) rename scwx-qt/source/scwx/qt/ui/setup/{map_page.hpp => map_layout_page.hpp} (68%) create mode 100644 scwx-qt/source/scwx/qt/ui/setup/map_provider_page.cpp create mode 100644 scwx-qt/source/scwx/qt/ui/setup/map_provider_page.hpp diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index babdff50..bf1a57ff 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -227,11 +227,13 @@ set(UI_UI source/scwx/qt/ui/about_dialog.ui source/scwx/qt/ui/settings_dialog.ui source/scwx/qt/ui/update_dialog.ui) set(HDR_UI_SETUP source/scwx/qt/ui/setup/finish_page.hpp - source/scwx/qt/ui/setup/map_page.hpp + source/scwx/qt/ui/setup/map_layout_page.hpp + source/scwx/qt/ui/setup/map_provider_page.hpp source/scwx/qt/ui/setup/setup_wizard.hpp source/scwx/qt/ui/setup/welcome_page.hpp) set(SRC_UI_SETUP source/scwx/qt/ui/setup/finish_page.cpp - source/scwx/qt/ui/setup/map_page.cpp + source/scwx/qt/ui/setup/map_layout_page.cpp + source/scwx/qt/ui/setup/map_provider_page.cpp source/scwx/qt/ui/setup/setup_wizard.cpp source/scwx/qt/ui/setup/welcome_page.cpp) set(HDR_UTIL source/scwx/qt/util/color.hpp diff --git a/scwx-qt/source/scwx/qt/ui/setup/map_page.cpp b/scwx-qt/source/scwx/qt/ui/setup/map_layout_page.cpp similarity index 51% rename from scwx-qt/source/scwx/qt/ui/setup/map_page.cpp rename to scwx-qt/source/scwx/qt/ui/setup/map_layout_page.cpp index e5d9af3b..e19e920b 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/map_page.cpp +++ b/scwx-qt/source/scwx/qt/ui/setup/map_layout_page.cpp @@ -1,4 +1,4 @@ -#include +#include namespace scwx { @@ -9,21 +9,21 @@ namespace ui namespace setup { -class MapPage::Impl +class MapLayoutPage::Impl { public: explicit Impl() = default; ~Impl() = default; }; -MapPage::MapPage(QWidget* parent) : +MapLayoutPage::MapLayoutPage(QWidget* parent) : QWizardPage(parent), p {std::make_shared()} { - setTitle(tr("Map Configuration")); - setSubTitle(tr("Configure the Supercell Wx map provider and basic layout.")); + setTitle(tr("Map Layout")); + setSubTitle(tr("Configure the Supercell Wx map layout.")); } -MapPage::~MapPage() = default; +MapLayoutPage::~MapLayoutPage() = default; } // namespace setup } // namespace ui diff --git a/scwx-qt/source/scwx/qt/ui/setup/map_page.hpp b/scwx-qt/source/scwx/qt/ui/setup/map_layout_page.hpp similarity index 68% rename from scwx-qt/source/scwx/qt/ui/setup/map_page.hpp rename to scwx-qt/source/scwx/qt/ui/setup/map_layout_page.hpp index 62070980..7e19f6d2 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/map_page.hpp +++ b/scwx-qt/source/scwx/qt/ui/setup/map_layout_page.hpp @@ -11,11 +11,11 @@ namespace ui namespace setup { -class MapPage : public QWizardPage +class MapLayoutPage : public QWizardPage { public: - explicit MapPage(QWidget* parent = nullptr); - ~MapPage(); + explicit MapLayoutPage(QWidget* parent = nullptr); + ~MapLayoutPage(); private: class Impl; diff --git a/scwx-qt/source/scwx/qt/ui/setup/map_provider_page.cpp b/scwx-qt/source/scwx/qt/ui/setup/map_provider_page.cpp new file mode 100644 index 00000000..7dc1ed2f --- /dev/null +++ b/scwx-qt/source/scwx/qt/ui/setup/map_provider_page.cpp @@ -0,0 +1,207 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace scwx +{ +namespace qt +{ +namespace ui +{ +namespace setup +{ + +struct MapProviderGroup +{ + QLabel* apiKeyLabel_ {}; + QLineEdit* apiKeyEdit_ {}; +}; + +class MapProviderPage::Impl +{ +public: + explicit Impl() = default; + ~Impl() = default; + + void SelectMapProvider(const QString& text); + void SelectMapProvider(map::MapProvider mapProvider); + void SetupMapProviderGroup(MapProviderPage* parent, + MapProviderGroup& group, + int row); + static void SetGroupVisible(MapProviderGroup& group, bool visible); + + QLayout* layout_ {}; + + QFrame* mapProviderFrame_ {}; + QGridLayout* mapProviderLayout_ {}; + QLabel* mapProviderLabel_ {}; + QComboBox* mapProviderComboBox_ {}; + QLabel* descriptionLabel_ {}; + QFrame* buttonFrame_ {}; + QHBoxLayout* buttonLayout_ {}; + QPushButton* apiKeyButton_ {}; + QSpacerItem* buttonSpacer_ {}; + + MapProviderGroup mapboxGroup_ {}; + MapProviderGroup maptilerGroup_ {}; + + map::MapProvider currentMapProvider_ {}; +}; + +MapProviderPage::MapProviderPage(QWidget* parent) : + QWizardPage(parent), p {std::make_shared()} +{ + setTitle(tr("Map Provider")); + setSubTitle(tr("Configure the Supercell Wx map provider.")); + + p->mapProviderFrame_ = new QFrame(parent); + p->mapProviderLayout_ = new QGridLayout(parent); + p->mapProviderLabel_ = new QLabel(parent); + p->mapProviderComboBox_ = new QComboBox(parent); + p->descriptionLabel_ = new QLabel(parent); + p->buttonFrame_ = new QFrame(parent); + p->buttonLayout_ = new QHBoxLayout(parent); + p->apiKeyButton_ = new QPushButton(parent); + p->buttonSpacer_ = + new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); + + // Map Provider + p->mapProviderLabel_->setText(tr("Map Provider")); + + for (const auto& mapProvider : map::MapProviderIterator()) + { + p->mapProviderComboBox_->addItem( + QString::fromStdString(map::GetMapProviderName(mapProvider))); + } + + p->mapProviderLayout_->setContentsMargins(0, 0, 0, 0); + p->mapProviderLayout_->addWidget(p->mapProviderLabel_, 0, 0, 1, 1); + p->mapProviderLayout_->addWidget(p->mapProviderComboBox_, 0, 1, 1, 1); + p->mapProviderFrame_->setLayout(p->mapProviderLayout_); + + // Description + p->descriptionLabel_->setText( + ("You must get an API key from the map provider. After creating an " + "account and reviewing terms of service, create an API key (or public " + "token) with default scopes (unless one is created for you). Enter " + "this API key here.")); + p->descriptionLabel_->setWordWrap(true); + + // API Key Button + p->buttonLayout_->setContentsMargins(0, 0, 0, 0); + p->buttonLayout_->addWidget(p->apiKeyButton_); + p->buttonLayout_->addItem(p->buttonSpacer_); + p->buttonFrame_->setLayout(p->buttonLayout_); + + p->SetupMapProviderGroup(this, p->mapboxGroup_, 1); + p->SetupMapProviderGroup(this, p->maptilerGroup_, 2); + + connect(p->mapProviderComboBox_, + &QComboBox::currentTextChanged, + this, + [this](const QString& text) { p->SelectMapProvider(text); }); + + connect(p->apiKeyButton_, + &QAbstractButton::clicked, + this, + [this]() + { + switch (p->currentMapProvider_) + { + case map::MapProvider::Mapbox: + QDesktopServices::openUrl(QUrl {"https://www.mapbox.com/"}); + break; + + case map::MapProvider::MapTiler: + QDesktopServices::openUrl(QUrl {"https://www.maptiler.com/"}); + break; + + default: + break; + } + }); + + // Map provider value + map::MapProvider defaultMapProvider = map::GetMapProvider( + settings::GeneralSettings::Instance().map_provider().GetDefault()); + std::string defaultMapProviderName = + map::GetMapProviderName(defaultMapProvider); + p->mapProviderComboBox_->setCurrentText( + QString::fromStdString(defaultMapProviderName)); + p->SelectMapProvider(defaultMapProvider); + + p->layout_ = new QVBoxLayout(this); + p->layout_->addWidget(p->mapProviderFrame_); + p->layout_->addWidget(p->descriptionLabel_); + p->layout_->addWidget(p->buttonFrame_); + setLayout(p->layout_); +} + +MapProviderPage::~MapProviderPage() = default; + +void MapProviderPage::Impl::SetupMapProviderGroup(MapProviderPage* parent, + MapProviderGroup& group, + int row) +{ + group.apiKeyLabel_ = new QLabel(parent); + group.apiKeyEdit_ = new QLineEdit(parent); + + group.apiKeyLabel_->setText("API Key"); + + mapProviderLayout_->addWidget(group.apiKeyLabel_, row, 0, 1, 1); + mapProviderLayout_->addWidget(group.apiKeyEdit_, row, 1, 1, 1); +} + +void MapProviderPage::Impl::SelectMapProvider(const QString& text) +{ + SelectMapProvider(map::GetMapProvider(text.toStdString())); +} + +void MapProviderPage::Impl::SelectMapProvider(map::MapProvider mapProvider) +{ + std::string name = map::GetMapProviderName(mapProvider); + + switch (mapProvider) + { + case map::MapProvider::Mapbox: + SetGroupVisible(mapboxGroup_, true); + SetGroupVisible(maptilerGroup_, false); + break; + + case map::MapProvider::MapTiler: + SetGroupVisible(mapboxGroup_, false); + SetGroupVisible(maptilerGroup_, true); + break; + + default: + break; + } + + apiKeyButton_->setText( + tr("Get %1 API Key").arg(QString::fromStdString(name))); + + currentMapProvider_ = mapProvider; +} + +void MapProviderPage::Impl::SetGroupVisible(MapProviderGroup& group, + bool visible) +{ + group.apiKeyLabel_->setVisible(visible); + group.apiKeyEdit_->setVisible(visible); +} + +} // namespace setup +} // namespace ui +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/ui/setup/map_provider_page.hpp b/scwx-qt/source/scwx/qt/ui/setup/map_provider_page.hpp new file mode 100644 index 00000000..6e642fbb --- /dev/null +++ b/scwx-qt/source/scwx/qt/ui/setup/map_provider_page.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include + +namespace scwx +{ +namespace qt +{ +namespace ui +{ +namespace setup +{ + +class MapProviderPage : public QWizardPage +{ +public: + explicit MapProviderPage(QWidget* parent = nullptr); + ~MapProviderPage(); + +private: + class Impl; + std::shared_ptr p; +}; + +} // namespace setup +} // namespace ui +} // namespace qt +} // namespace scwx 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 f4253e5a..9daf903e 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.cpp +++ b/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.cpp @@ -1,6 +1,7 @@ #include #include -#include +#include +#include #include #include @@ -35,7 +36,8 @@ SetupWizard::SetupWizard(QWidget* parent) : setOption(QWizard::WizardOption::HaveHelpButton); setPage(static_cast(Page::Welcome), new WelcomePage(this)); - setPage(static_cast(Page::Map), new MapPage(this)); + setPage(static_cast(Page::MapProvider), new MapProviderPage(this)); + setPage(static_cast(Page::MapLayout), new MapLayoutPage(this)); setPage(static_cast(Page::Finish), new FinishPage(this)); #if !defined(Q_OS_MAC) 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 f4c5e9e8..d565c45a 100644 --- a/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.hpp +++ b/scwx-qt/source/scwx/qt/ui/setup/setup_wizard.hpp @@ -17,7 +17,8 @@ public: enum class Page : int { Welcome = 0, - Map, + MapProvider, + MapLayout, Finish };