mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 02:40:05 +00:00 
			
		
		
		
	Validate alert layers and movable status
This commit is contained in:
		
							parent
							
								
									3c79f48493
								
							
						
					
					
						commit
						8719d2d02a
					
				
					 1 changed files with 54 additions and 3 deletions
				
			
		|  | @ -52,7 +52,7 @@ struct LayerInfo | |||
| { | ||||
|    types::LayerType             type_; | ||||
|    LayerDescription             description_; | ||||
|    bool                         movable_; | ||||
|    bool                         movable_ {true}; | ||||
|    std::array<bool, kMapCount_> displayed_ {true, true, true, true}; | ||||
| }; | ||||
| 
 | ||||
|  | @ -78,6 +78,13 @@ static const std::vector<LayerInfo> kImmovableLayers_ { | |||
|    {types::LayerType::Map, types::Layer::MapUnderlay, false}, | ||||
| }; | ||||
| 
 | ||||
| static const std::array<awips::Phenomenon, 5> kAlertPhenomena_ { | ||||
|    awips::Phenomenon::Tornado, | ||||
|    awips::Phenomenon::SnowSquall, | ||||
|    awips::Phenomenon::SevereThunderstorm, | ||||
|    awips::Phenomenon::FlashFlood, | ||||
|    awips::Phenomenon::Marine}; | ||||
| 
 | ||||
| class LayerModel::Impl | ||||
| { | ||||
| public: | ||||
|  | @ -201,6 +208,8 @@ void LayerModel::Impl::ValidateLayerSettings(LayerVector& layers) | |||
| { | ||||
|    // Validate immovable layers
 | ||||
|    std::vector<LayerVector::iterator> immovableIterators {}; | ||||
|    LayerVector::iterator              mapSymbologyIterator {}; | ||||
|    LayerVector::iterator              mapUnderlayIterator {}; | ||||
|    for (auto& immovableLayer : kImmovableLayers_) | ||||
|    { | ||||
|       // Set the default displayed state for a layer that is not found
 | ||||
|  | @ -243,11 +252,53 @@ void LayerModel::Impl::ValidateLayerSettings(LayerVector& layers) | |||
|          it->displayed_ = displayed; | ||||
|       } | ||||
| 
 | ||||
|       // Store positional iterators
 | ||||
|       if (it->type_ == types::LayerType::Map) | ||||
|       { | ||||
|          switch (std::get<types::Layer>(it->description_)) | ||||
|          { | ||||
|          case types::Layer::MapSymbology: | ||||
|             mapSymbologyIterator = it; | ||||
|             break; | ||||
| 
 | ||||
|          case types::Layer::MapUnderlay: | ||||
|             mapUnderlayIterator = it; | ||||
|             break; | ||||
| 
 | ||||
|          default: | ||||
|             break; | ||||
|          } | ||||
|       } | ||||
| 
 | ||||
|       // Add the immovable iterator to the list
 | ||||
|       immovableIterators.push_back(it); | ||||
|    } | ||||
| 
 | ||||
|       // Ensure the layer is marked immovable
 | ||||
|       it->movable_ = false; | ||||
|    // Validate alert layers
 | ||||
|    for (auto& phenomenon : kAlertPhenomena_) | ||||
|    { | ||||
|       // Find the alert layer
 | ||||
|       auto it = std::find_if(layers.begin(), | ||||
|                              layers.end(), | ||||
|                              [&phenomenon](const LayerInfo& layer) | ||||
|                              { | ||||
|                                 return layer.type_ == types::LayerType::Alert && | ||||
|                                        std::get<awips::Phenomenon>( | ||||
|                                           layer.description_) == phenomenon; | ||||
|                              }); | ||||
| 
 | ||||
|       if (it == layers.end()) | ||||
|       { | ||||
|          layers.insert(mapSymbologyIterator, | ||||
|                        {types::LayerType::Alert, phenomenon}); | ||||
|       } | ||||
|    } | ||||
| 
 | ||||
|    // Ensure layers are appropriately marked movable
 | ||||
|    for (auto& layer : layers) | ||||
|    { | ||||
|       layer.movable_ = (layer.type_ != types::LayerType::Information && | ||||
|                         layer.type_ != types::LayerType::Map); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat