/// <summary> /// tri la liste des Comptes à rebours par pordre alphabétique ou par ordre de temps restant /// </summary> public void TrierListeCaR() { var listeTri = new List <CaR>(); //si le tri est par Timer on le fait par LINQ if (OrderByTimer) { listeTri.AddRange(ListeCaR.Where(c => !c.EnPause).OrderBy(c => c.Date).ToList()); listeTri.AddRange(ListeCaR.Where(c => c.EnPause).OrderBy(c => c.NbSecondes).ToList()); } //sinon (par titre) on le fait par le CompareTo de Chrono else { listeTri = (from item in ListeCaR orderby item.Titre select item).ToList(); listeTri.Sort(); listeTri.Reverse(); } ListeCaR.Clear(); foreach (var t in listeTri) { ListeCaR.Add(t); } }
/// <summary> /// ajoute un timer à sa liste /// </summary> /// <param name="chrono"></param> public void AjouterModifier(Timer chrono) { if (chrono is CaR) { var car = chrono as CaR; if (ListeCaR.Contains(car)) { var index = ListeCaR.IndexOf(car); ListeCaR.Remove(car); ListeCaR.Insert(index, car); } else //sinon on ajoute { //récup de l'id max et ajoute à la liste var res = (ListeCaR.Count == 0) ? 0 : _listeCaR.OrderByDescending(i => i.Id).FirstOrDefault().Id; car.Id = res + 1; ListeCaR.Add(car); } } if (chrono is Chrono) { var ch = chrono as Chrono; //si il n'a pas d'id, c'est un nouveau chrono if (ch.Id == 0) { ch.Id = ((ListeChronos.Count == 0) ? 0 : ListeChronos.OrderByDescending(i => i.Id).FirstOrDefault().Id) + 1; ch.IdChrono = ((ListeChronos.Count == 0) ? 0 : ListeChronos.OrderByDescending(i => i.IdChrono).FirstOrDefault().IdChrono) + 1; ch.Valider = false; ch.AffichNbSecondesDiff = false; ch.IsParent = true; ch.Stop(); ListeChronos.Add(ch); } //si il a un Id, ont l'ajoute à la suite des Id Chrono else { ch.Id = ((ListeChronos.Count == 0)? 0: ListeChronos.OrderByDescending(i => i.Id).FirstOrDefault().Id) + 1; ch.Stop(); //récupération ddu temps du chrono précédent (id max de l'idChrono) ch.NbSecondesDiff = ch.NbSecondes - ListeChronos.Where(listeChrono => listeChrono.IdChrono == ch.IdChrono).OrderByDescending(i => i.Id).FirstOrDefault().NbSecondes; //on vérifie si c'est le le chrono le plus rapide, et si c'est le cas on met à jour les données var res = ListeChronos.Count(listeChrono => listeChrono.IdChrono == ch.IdChrono && !listeChrono.IsParent && listeChrono.NbSecondesDiff < ch.NbSecondesDiff); if (res == 0) { ch.IsFastestTimer = true; foreach (var item in ListeChronos.Where(item => item.IdChrono == ch.IdChrono)) { item.IsFastestTimer = false; } } ch.AffichNbSecondesDiff = true; ch.IsParent = false; var tt = ListeChronos.FirstOrDefault(listeChrono => listeChrono.IdChrono == ch.IdChrono && listeChrono.IsParent); var indexOri = ListeChronos.IndexOf(tt); ListeChronos.Insert(indexOri + 1, ch); } } }