mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 03:20: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
 | ||||||
|  |    if (p->initialStyleName_.empty()) | ||||||
|  |    { | ||||||
|       changeStyle(); |       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
	
	 Dan Paulat
						Dan Paulat