mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 07:30:04 +00:00 
			
		
		
		
	Validate immovable layers
This commit is contained in:
		
							parent
							
								
									7cd1cd0681
								
							
						
					
					
						commit
						3c79f48493
					
				
					 1 changed files with 57 additions and 2 deletions
				
			
		|  | @ -71,6 +71,13 @@ static const std::vector<LayerInfo> kDefaultLayers_ { | ||||||
|    {types::LayerType::Map, types::Layer::MapUnderlay, false}, |    {types::LayerType::Map, types::Layer::MapUnderlay, false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const std::vector<LayerInfo> kImmovableLayers_ { | ||||||
|  |    {types::LayerType::Information, types::Layer::MapOverlay, false}, | ||||||
|  |    {types::LayerType::Information, types::Layer::ColorTable, false}, | ||||||
|  |    {types::LayerType::Map, types::Layer::MapSymbology, false}, | ||||||
|  |    {types::LayerType::Map, types::Layer::MapUnderlay, false}, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| class LayerModel::Impl | class LayerModel::Impl | ||||||
| { | { | ||||||
| public: | public: | ||||||
|  | @ -192,8 +199,56 @@ void LayerModel::Impl::ReadLayerSettings() | ||||||
| 
 | 
 | ||||||
| void LayerModel::Impl::ValidateLayerSettings(LayerVector& layers) | void LayerModel::Impl::ValidateLayerSettings(LayerVector& layers) | ||||||
| { | { | ||||||
|    // TODO
 |    // Validate immovable layers
 | ||||||
|    Q_UNUSED(layers); |    std::vector<LayerVector::iterator> immovableIterators {}; | ||||||
|  |    for (auto& immovableLayer : kImmovableLayers_) | ||||||
|  |    { | ||||||
|  |       // Set the default displayed state for a layer that is not found
 | ||||||
|  |       std::array<bool, kMapCount_> displayed {true, true, true, true}; | ||||||
|  | 
 | ||||||
|  |       // Find the immovable layer
 | ||||||
|  |       auto it = std::find_if(layers.begin(), | ||||||
|  |                              layers.end(), | ||||||
|  |                              [&immovableLayer](const LayerInfo& layer) | ||||||
|  |                              { | ||||||
|  |                                 return layer.type_ == immovableLayer.type_ && | ||||||
|  |                                        layer.description_ == | ||||||
|  |                                           immovableLayer.description_; | ||||||
|  |                              }); | ||||||
|  | 
 | ||||||
|  |       // If the immovable layer is out of order
 | ||||||
|  |       if (!immovableIterators.empty() && immovableIterators.back() > it) | ||||||
|  |       { | ||||||
|  |          // Save the displayed state of the immovable layer
 | ||||||
|  |          displayed = it->displayed_; | ||||||
|  | 
 | ||||||
|  |          // Remove the layer from the list, to re-add it later
 | ||||||
|  |          layers.erase(it); | ||||||
|  | 
 | ||||||
|  |          // Treat the layer as not found
 | ||||||
|  |          it = layers.end(); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       // If the immovable layer is not found
 | ||||||
|  |       if (it == layers.end()) | ||||||
|  |       { | ||||||
|  |          // If this is the first immovable layer, insert at the beginning,
 | ||||||
|  |          // otherwise, insert after the previous immovable layer
 | ||||||
|  |          LayerVector::iterator insertPosition = | ||||||
|  |             immovableIterators.empty() ? layers.begin() : | ||||||
|  |                                          immovableIterators.back() + 1; | ||||||
|  |          it = layers.insert(insertPosition, immovableLayer); | ||||||
|  | 
 | ||||||
|  |          // Restore the displayed state of the immovable layer
 | ||||||
|  |          it->displayed_ = displayed; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       // Add the immovable iterator to the list
 | ||||||
|  |       immovableIterators.push_back(it); | ||||||
|  | 
 | ||||||
|  |       // Ensure the layer is marked immovable
 | ||||||
|  |       it->movable_ = false; | ||||||
|  |    } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void LayerModel::Impl::WriteLayerSettings() | void LayerModel::Impl::WriteLayerSettings() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat