mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 18:50:05 +00:00
parent
effe78e1be
commit
6000abdeb3
7 changed files with 120 additions and 7 deletions
|
|
@ -113,6 +113,7 @@ public:
|
||||||
|
|
||||||
void AsyncSetup();
|
void AsyncSetup();
|
||||||
void ConfigureMapLayout();
|
void ConfigureMapLayout();
|
||||||
|
void ConfigureMapStyles();
|
||||||
void ConnectAnimationSignals();
|
void ConnectAnimationSignals();
|
||||||
void ConnectMapSignals();
|
void ConnectMapSignals();
|
||||||
void ConnectOtherSignals();
|
void ConnectOtherSignals();
|
||||||
|
|
@ -275,6 +276,7 @@ MainWindow::MainWindow(QWidget* parent) :
|
||||||
}
|
}
|
||||||
|
|
||||||
p->PopulateMapStyles();
|
p->PopulateMapStyles();
|
||||||
|
p->ConfigureMapStyles();
|
||||||
p->ConnectMapSignals();
|
p->ConnectMapSignals();
|
||||||
p->ConnectAnimationSignals();
|
p->ConnectAnimationSignals();
|
||||||
p->ConnectOtherSignals();
|
p->ConnectOtherSignals();
|
||||||
|
|
@ -597,6 +599,39 @@ void MainWindowImpl::ConfigureMapLayout()
|
||||||
SetActiveMap(maps_.at(0));
|
SetActiveMap(maps_.at(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindowImpl::ConfigureMapStyles()
|
||||||
|
{
|
||||||
|
const auto& mapProviderInfo = map::GetMapProviderInfo(mapProvider_);
|
||||||
|
auto& mapSettings = manager::SettingsManager::map_settings();
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < maps_.size(); i++)
|
||||||
|
{
|
||||||
|
std::string styleName = mapSettings.map_style(i).GetValue();
|
||||||
|
|
||||||
|
if (std::find_if(mapProviderInfo.mapStyles_.cbegin(),
|
||||||
|
mapProviderInfo.mapStyles_.cend(),
|
||||||
|
[&](const auto& mapStyle) {
|
||||||
|
return mapStyle.name_ == styleName;
|
||||||
|
}) != mapProviderInfo.mapStyles_.cend())
|
||||||
|
{
|
||||||
|
// Initialize map style from settings
|
||||||
|
maps_.at(i)->SetInitialMapStyle(styleName);
|
||||||
|
|
||||||
|
// Update the active map's style
|
||||||
|
if (maps_[i] == activeMap_)
|
||||||
|
{
|
||||||
|
UpdateMapStyle(styleName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!mapProviderInfo.mapStyles_.empty())
|
||||||
|
{
|
||||||
|
// Stage first valid map style from map provider
|
||||||
|
mapSettings.map_style(i).StageValue(
|
||||||
|
mapProviderInfo.mapStyles_.at(0).name_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindowImpl::ConnectMapSignals()
|
void MainWindowImpl::ConnectMapSignals()
|
||||||
{
|
{
|
||||||
for (const auto& mapWidget : maps_)
|
for (const auto& mapWidget : maps_)
|
||||||
|
|
@ -621,7 +656,13 @@ void MainWindowImpl::ConnectMapSignals()
|
||||||
connect(mapWidget,
|
connect(mapWidget,
|
||||||
&map::MapWidget::MapStyleChanged,
|
&map::MapWidget::MapStyleChanged,
|
||||||
this,
|
this,
|
||||||
&MainWindowImpl::UpdateMapStyle);
|
[&](const std::string& mapStyle)
|
||||||
|
{
|
||||||
|
if (mapWidget == activeMap_)
|
||||||
|
{
|
||||||
|
UpdateMapStyle(mapStyle);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
connect(
|
connect(
|
||||||
mapWidget,
|
mapWidget,
|
||||||
|
|
@ -758,7 +799,21 @@ void MainWindowImpl::ConnectOtherSignals()
|
||||||
&QComboBox::currentTextChanged,
|
&QComboBox::currentTextChanged,
|
||||||
mainWindow_,
|
mainWindow_,
|
||||||
[&](const QString& text)
|
[&](const QString& text)
|
||||||
{ activeMap_->SetMapStyle(text.toStdString()); });
|
{
|
||||||
|
activeMap_->SetMapStyle(text.toStdString());
|
||||||
|
|
||||||
|
// Update settings for active map
|
||||||
|
for (std::size_t i = 0; i < maps_.size(); ++i)
|
||||||
|
{
|
||||||
|
if (maps_[i] == activeMap_)
|
||||||
|
{
|
||||||
|
auto& mapSettings =
|
||||||
|
manager::SettingsManager::map_settings();
|
||||||
|
mapSettings.map_style(i).StageValue(text.toStdString());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
connect(level2ProductsWidget_,
|
connect(level2ProductsWidget_,
|
||||||
&ui::Level2ProductsWidget::RadarProductSelected,
|
&ui::Level2ProductsWidget::RadarProductSelected,
|
||||||
mainWindow_,
|
mainWindow_,
|
||||||
|
|
@ -925,6 +980,17 @@ void MainWindowImpl::UpdateMapStyle(const std::string& styleName)
|
||||||
if (index != -1)
|
if (index != -1)
|
||||||
{
|
{
|
||||||
mainWindow_->ui->mapStyleComboBox->setCurrentIndex(index);
|
mainWindow_->ui->mapStyleComboBox->setCurrentIndex(index);
|
||||||
|
|
||||||
|
// Update settings for active map
|
||||||
|
for (std::size_t i = 0; i < maps_.size(); ++i)
|
||||||
|
{
|
||||||
|
if (maps_[i] == activeMap_)
|
||||||
|
{
|
||||||
|
auto& mapSettings = manager::SettingsManager::map_settings();
|
||||||
|
mapSettings.map_style(i).StageValue(styleName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@ void Shutdown()
|
||||||
bool dataChanged = false;
|
bool dataChanged = false;
|
||||||
|
|
||||||
dataChanged |= general_settings().Shutdown();
|
dataChanged |= general_settings().Shutdown();
|
||||||
|
dataChanged |= map_settings().Shutdown();
|
||||||
|
|
||||||
if (dataChanged)
|
if (dataChanged)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,7 @@ public:
|
||||||
QPointF lastPos_;
|
QPointF lastPos_;
|
||||||
std::size_t currentStyleIndex_;
|
std::size_t currentStyleIndex_;
|
||||||
const MapStyle* currentStyle_;
|
const MapStyle* currentStyle_;
|
||||||
|
std::string initialStyleName_ {};
|
||||||
|
|
||||||
uint64_t frameDraws_;
|
uint64_t frameDraws_;
|
||||||
|
|
||||||
|
|
@ -585,6 +586,11 @@ void MapWidget::SetMapParameters(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MapWidget::SetInitialMapStyle(const std::string& styleName)
|
||||||
|
{
|
||||||
|
p->initialStyleName_ = styleName;
|
||||||
|
}
|
||||||
|
|
||||||
void MapWidget::SetMapStyle(const std::string& styleName)
|
void MapWidget::SetMapStyle(const std::string& styleName)
|
||||||
{
|
{
|
||||||
const auto& mapProviderInfo = GetMapProviderInfo(p->mapProvider_);
|
const auto& mapProviderInfo = GetMapProviderInfo(p->mapProvider_);
|
||||||
|
|
@ -830,7 +836,14 @@ void MapWidget::initializeGL()
|
||||||
p->prevPitch_);
|
p->prevPitch_);
|
||||||
|
|
||||||
// Update style
|
// Update style
|
||||||
changeStyle();
|
if (p->initialStyleName_.empty())
|
||||||
|
{
|
||||||
|
changeStyle();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetMapStyle(p->initialStyleName_);
|
||||||
|
}
|
||||||
|
|
||||||
connect(p->map_.get(),
|
connect(p->map_.get(),
|
||||||
&QMapLibreGL::Map::mapChanged,
|
&QMapLibreGL::Map::mapChanged,
|
||||||
|
|
|
||||||
|
|
@ -111,6 +111,7 @@ public:
|
||||||
double zoom,
|
double zoom,
|
||||||
double bearing,
|
double bearing,
|
||||||
double pitch);
|
double pitch);
|
||||||
|
void SetInitialMapStyle(const std::string& styleName);
|
||||||
void SetMapStyle(const std::string& styleName);
|
void SetMapStyle(const std::string& styleName);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,12 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
|
||||||
static constexpr std::size_t kCount_ = 4u;
|
static constexpr std::size_t kCount_ = 4u;
|
||||||
static const std::string kDefaultRadarSite_ = "KLSX";
|
static const std::string kDefaultRadarSite_ = "KLSX";
|
||||||
|
|
||||||
|
static const std::string kMapStyleName_ {"map_style"};
|
||||||
static const std::string kRadarSiteName_ {"radar_site"};
|
static const std::string kRadarSiteName_ {"radar_site"};
|
||||||
static const std::string kRadarProductGroupName_ {"radar_product_group"};
|
static const std::string kRadarProductGroupName_ {"radar_product_group"};
|
||||||
static const std::string kRadarProductName_ {"radar_product"};
|
static const std::string kRadarProductName_ {"radar_product"};
|
||||||
|
|
||||||
|
static const std::string kDefaultMapStyle_ {"?"};
|
||||||
static constexpr common::RadarProductGroup kDefaultRadarProductGroup_ =
|
static constexpr common::RadarProductGroup kDefaultRadarProductGroup_ =
|
||||||
common::RadarProductGroup::Level3;
|
common::RadarProductGroup::Level3;
|
||||||
static const std::string kDefaultRadarProductGroupString_ = "L3";
|
static const std::string kDefaultRadarProductGroupString_ = "L3";
|
||||||
|
|
@ -38,6 +40,7 @@ class MapSettingsImpl
|
||||||
public:
|
public:
|
||||||
struct MapData
|
struct MapData
|
||||||
{
|
{
|
||||||
|
SettingsVariable<std::string> mapStyle_ {kMapStyleName_};
|
||||||
SettingsVariable<std::string> radarSite_ {kRadarSiteName_};
|
SettingsVariable<std::string> radarSite_ {kRadarSiteName_};
|
||||||
SettingsVariable<std::string> radarProductGroup_ {
|
SettingsVariable<std::string> radarProductGroup_ {
|
||||||
kRadarProductGroupName_};
|
kRadarProductGroupName_};
|
||||||
|
|
@ -48,6 +51,7 @@ public:
|
||||||
{
|
{
|
||||||
for (std::size_t i = 0; i < kCount_; i++)
|
for (std::size_t i = 0; i < kCount_; i++)
|
||||||
{
|
{
|
||||||
|
map_[i].mapStyle_.SetDefault(kDefaultMapStyle_);
|
||||||
map_[i].radarSite_.SetDefault(kDefaultRadarSite_);
|
map_[i].radarSite_.SetDefault(kDefaultRadarSite_);
|
||||||
map_[i].radarProductGroup_.SetDefault(
|
map_[i].radarProductGroup_.SetDefault(
|
||||||
kDefaultRadarProductGroupString_);
|
kDefaultRadarProductGroupString_);
|
||||||
|
|
@ -90,7 +94,8 @@ public:
|
||||||
});
|
});
|
||||||
|
|
||||||
variables_.insert(variables_.cend(),
|
variables_.insert(variables_.cend(),
|
||||||
{&map_[i].radarSite_,
|
{&map_[i].mapStyle_,
|
||||||
|
&map_[i].radarSite_,
|
||||||
&map_[i].radarProductGroup_,
|
&map_[i].radarProductGroup_,
|
||||||
&map_[i].radarProduct_});
|
&map_[i].radarProduct_});
|
||||||
}
|
}
|
||||||
|
|
@ -100,6 +105,7 @@ public:
|
||||||
|
|
||||||
void SetDefaults(std::size_t i)
|
void SetDefaults(std::size_t i)
|
||||||
{
|
{
|
||||||
|
map_[i].mapStyle_.SetValueToDefault();
|
||||||
map_[i].radarSite_.SetValueToDefault();
|
map_[i].radarSite_.SetValueToDefault();
|
||||||
map_[i].radarProductGroup_.SetValueToDefault();
|
map_[i].radarProductGroup_.SetValueToDefault();
|
||||||
map_[i].radarProduct_.SetValueToDefault();
|
map_[i].radarProduct_.SetValueToDefault();
|
||||||
|
|
@ -127,6 +133,11 @@ std::size_t MapSettings::count() const
|
||||||
return kCount_;
|
return kCount_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SettingsVariable<std::string>& MapSettings::map_style(std::size_t i) const
|
||||||
|
{
|
||||||
|
return p->map_[i].mapStyle_;
|
||||||
|
}
|
||||||
|
|
||||||
SettingsVariable<std::string>& MapSettings::radar_site(std::size_t i) const
|
SettingsVariable<std::string>& MapSettings::radar_site(std::size_t i) const
|
||||||
{
|
{
|
||||||
return p->map_[i].radarSite_;
|
return p->map_[i].radarSite_;
|
||||||
|
|
@ -143,6 +154,21 @@ SettingsVariable<std::string>& MapSettings::radar_product(std::size_t i) const
|
||||||
return p->map_[i].radarProduct_;
|
return p->map_[i].radarProduct_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MapSettings::Shutdown()
|
||||||
|
{
|
||||||
|
bool dataChanged = false;
|
||||||
|
|
||||||
|
// Commit settings that are managed separate from the settings dialog
|
||||||
|
for (std::size_t i = 0; i < kCount_; ++i)
|
||||||
|
{
|
||||||
|
MapSettingsImpl::MapData& mapRecordSettings = p->map_[i];
|
||||||
|
|
||||||
|
dataChanged |= mapRecordSettings.mapStyle_.Commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
return dataChanged;
|
||||||
|
}
|
||||||
|
|
||||||
bool MapSettings::ReadJson(const boost::json::object& json)
|
bool MapSettings::ReadJson(const boost::json::object& json)
|
||||||
{
|
{
|
||||||
bool validated = true;
|
bool validated = true;
|
||||||
|
|
@ -161,6 +187,7 @@ bool MapSettings::ReadJson(const boost::json::object& json)
|
||||||
MapSettingsImpl::MapData& mapRecordSettings = p->map_[i];
|
MapSettingsImpl::MapData& mapRecordSettings = p->map_[i];
|
||||||
|
|
||||||
// Load JSON Elements
|
// Load JSON Elements
|
||||||
|
validated &= mapRecordSettings.mapStyle_.ReadValue(mapRecord);
|
||||||
validated &= mapRecordSettings.radarSite_.ReadValue(mapRecord);
|
validated &= mapRecordSettings.radarSite_.ReadValue(mapRecord);
|
||||||
validated &=
|
validated &=
|
||||||
mapRecordSettings.radarProductGroup_.ReadValue(mapRecord);
|
mapRecordSettings.radarProductGroup_.ReadValue(mapRecord);
|
||||||
|
|
@ -211,7 +238,8 @@ void tag_invoke(boost::json::value_from_tag,
|
||||||
boost::json::value& jv,
|
boost::json::value& jv,
|
||||||
const MapSettingsImpl::MapData& data)
|
const MapSettingsImpl::MapData& data)
|
||||||
{
|
{
|
||||||
jv = {{kRadarSiteName_, data.radarSite_.GetValue()},
|
jv = {{kMapStyleName_, data.mapStyle_.GetValue()},
|
||||||
|
{kRadarSiteName_, data.radarSite_.GetValue()},
|
||||||
{kRadarProductGroupName_, data.radarProductGroup_.GetValue()},
|
{kRadarProductGroupName_, data.radarProductGroup_.GetValue()},
|
||||||
{kRadarProductName_, data.radarProduct_.GetValue()}};
|
{kRadarProductName_, data.radarProduct_.GetValue()}};
|
||||||
}
|
}
|
||||||
|
|
@ -224,7 +252,8 @@ bool operator==(const MapSettings& lhs, const MapSettings& rhs)
|
||||||
bool operator==(const MapSettingsImpl::MapData& lhs,
|
bool operator==(const MapSettingsImpl::MapData& lhs,
|
||||||
const MapSettingsImpl::MapData& rhs)
|
const MapSettingsImpl::MapData& rhs)
|
||||||
{
|
{
|
||||||
return (lhs.radarSite_ == rhs.radarSite_ &&
|
return (lhs.mapStyle_ == rhs.mapStyle_ && //
|
||||||
|
lhs.radarSite_ == rhs.radarSite_ &&
|
||||||
lhs.radarProductGroup_ == rhs.radarProductGroup_ &&
|
lhs.radarProductGroup_ == rhs.radarProductGroup_ &&
|
||||||
lhs.radarProduct_ == rhs.radarProduct_);
|
lhs.radarProduct_ == rhs.radarProduct_);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,13 @@ public:
|
||||||
MapSettings& operator=(MapSettings&&) noexcept;
|
MapSettings& operator=(MapSettings&&) noexcept;
|
||||||
|
|
||||||
std::size_t count() const;
|
std::size_t count() const;
|
||||||
|
SettingsVariable<std::string>& map_style(std::size_t i) const;
|
||||||
SettingsVariable<std::string>& radar_site(std::size_t i) const;
|
SettingsVariable<std::string>& radar_site(std::size_t i) const;
|
||||||
SettingsVariable<std::string>& radar_product_group(std::size_t i) const;
|
SettingsVariable<std::string>& radar_product_group(std::size_t i) const;
|
||||||
SettingsVariable<std::string>& radar_product(std::size_t i) const;
|
SettingsVariable<std::string>& radar_product(std::size_t i) const;
|
||||||
|
|
||||||
|
bool Shutdown();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the variables from the JSON object.
|
* Reads the variables from the JSON object.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 98ee58919fc2d616519e514f70308658c5a737e5
|
Subproject commit 875afa5ead329536f802096ca1d2ef1010a7cc6b
|
||||||
Loading…
Add table
Add a link
Reference in a new issue