using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media;
namespace FingersDance.Data
{
public class DataDictionary
{
Dictionary<int, List<Color>> _Data = new Dictionary<int, List<Color>>();
public DataDictionary()
{
if (_Data == null)
_Data = new Dictionary<int, List<Color>>();
}
public void AddAnnotation(Annotation annotation)
{
try
{
// Recherche de l'élément qui précède le TC de début
List<Color> temp = new List<Color>();
int value = 0;
for (int i = (int)annotation.TcBegin; i >= 0; i--)
if (_Data.ContainsKey(i))
{
value = i;
i = -1;
}
// Ajout des couleurs de l'élément qui précède
if (!_Data.ContainsKey((int)annotation.TcBegin))
{
if (_Data.ContainsKey(value))
foreach (Color elt in _Data[value])
temp.Add(elt);
_Data.Add((int)annotation.TcBegin, temp);
}
// Ajout de la couleur à tous les éléments entre le début et la fin de l'annotation
foreach (KeyValuePair<int, List<Color>> elt in _Data)
if (elt.Key >= (int)annotation.TcBegin && elt.Key < (int)(annotation.TcBegin + annotation.Dur) && !elt.Value.Contains(annotation.Color))
elt.Value.Add(annotation.Color);
// Vérification que début et fin correspondent à deux éléments distincts et ajout de la fin de l'annotation si nécessaire (tc de fin inexistant)
if (((int)annotation.TcBegin) != ((int)(annotation.TcBegin + annotation.Dur)))
{
temp = new List<Color>();
if (!_Data.ContainsKey((int)(annotation.TcBegin + annotation.Dur)))
{
for (int i = (int)(annotation.TcBegin + annotation.Dur); i >= 0; i--)
if (_Data.ContainsKey(i))
{
value = i;
i = -1;
}
if (_Data.ContainsKey(value))
foreach (Color elt in _Data[value])
temp.Add(elt);
temp.Remove(annotation.Color);
_Data.Add((int)(annotation.TcBegin + annotation.Dur), temp);
}
}
else if (!_Data.ContainsKey((int)(annotation.TcBegin + 1)))
{
temp = new List<Color>();
foreach (Color elt in _Data[(int)annotation.TcBegin])
temp.Add(elt);
_Data.Add((int)(annotation.TcBegin + 1), temp);
}
}
catch { }
}
public void RemoveAnnotation(Annotation annotation)
{
try
{
// Suppression de la couleur à tous les éléments entre le début et la fin de l'annotation
foreach (KeyValuePair<int, List<Color>> elt in _Data)
if (elt.Key >= (int)annotation.TcBegin && elt.Key < (int)(annotation.TcBegin + annotation.Dur) && elt.Value.Contains(annotation.Color))
elt.Value.Remove(annotation.Color);
}
catch { }
}
public List<Color> GetColors(int TC)
{
try
{
for (int i = TC; i >= 0; i--)
if (_Data.ContainsKey(i))
return _Data[i];
return new List<Color>();
}
catch (Exception)
{
return new List<Color>();
}
}
}
}