using System; using System.Collections.Generic; using System.Linq; namespace Encompass { internal class DrawLayerManager { private SortedList layerOrder = new SortedList(); private Dictionary> layerIndexToComponentIDs = new Dictionary>(); private Dictionary> layerIndexToGeneralRenderers = new Dictionary>(); private Dictionary componentIDToLayerIndex = new Dictionary(); public IEnumerable LayerOrder { get { return layerOrder.Values; } } public void RegisterGeneralRendererWithLayer(GeneralRenderer renderer, int layer) { if (layerIndexToGeneralRenderers.ContainsKey(layer)) { var set = layerIndexToGeneralRenderers[layer]; set.Add(renderer); } else { var set = new HashSet(); layerIndexToGeneralRenderers.Add(layer, set); set.Add(renderer); } if (!layerOrder.ContainsKey(layer)) { layerOrder.Add(layer, layer); } } public void UnregisterGeneralRendererWithLayer(GeneralRenderer renderer, int layer) { if (layerIndexToGeneralRenderers.ContainsKey(layer)) { layerIndexToGeneralRenderers[layer].Remove(renderer); } } public void AdjustRendererLayer(GeneralRenderer renderer, int oldLayer, int newLayer) { UnregisterGeneralRendererWithLayer(renderer, oldLayer); RegisterGeneralRendererWithLayer(renderer, newLayer); } public void RegisterComponentWithLayer(Guid id, int layer) { if (layerIndexToComponentIDs.ContainsKey(layer)) { var set = layerIndexToComponentIDs[layer]; set.Add(id); } else { var set = new HashSet(); layerIndexToComponentIDs.Add(layer, set); set.Add(id); } componentIDToLayerIndex[id] = layer; if (!layerOrder.ContainsKey(layer)) { layerOrder.Add(layer, layer); } } public void UnRegisterComponentWithLayer(Guid id) { if (componentIDToLayerIndex.ContainsKey(id)) { var layer = componentIDToLayerIndex[id]; layerIndexToComponentIDs[layer].Remove(id); } } public void AdjustComponentLayer(Guid id, int layer) { UnRegisterComponentWithLayer(id); RegisterComponentWithLayer(id, layer); } public IEnumerable ComponentIDsByLayer(int layer) { return layerIndexToComponentIDs.ContainsKey(layer) ? layerIndexToComponentIDs[layer] : Enumerable.Empty(); } public IEnumerable GeneralRenderersByLayer(int layer) { return layerIndexToGeneralRenderers.ContainsKey(layer) ? layerIndexToGeneralRenderers[layer] : Enumerable.Empty(); } } }