//--------------------------------------------------- public void RecalculeSuivants(CNiveauMapSatisfaction niveau) { //Récupère le niveau suivant CNiveauMapSatisfaction niveauSuiv = null; foreach (CNiveauMapSatisfaction niveauAutre in m_listeNiveaux) { if (niveauAutre.NiveauSatisfaction == niveau.NiveauSatisfaction + 1) { niveauSuiv = niveauAutre; break; } } if (niveauSuiv == null) { //Création du niveau précédent niveauSuiv = new CNiveauMapSatisfaction(this, niveau.NiveauSatisfaction + 1); m_listeNiveaux.Add(niveauSuiv); } HashSet <CDessinSatisfaction> dessinsRacinesToRemove = new HashSet <CDessinSatisfaction>(); foreach (CDessinSatisfaction dessin in niveauSuiv.Dessins) { if (dessin.DessinParent == null) { dessinsRacinesToRemove.Add(dessin); } } foreach (CDessinSatisfaction dessin in niveau.Dessins) { CBesoin besoin = dessin.Satisfaction as CBesoin; if (besoin != null) { string strLib = besoin.Libelle; foreach (CRelationBesoin_Satisfaction rel in besoin.RelationsSatisfactions) { CDessinSatisfaction dessinBesoin = GetDessin(rel.Satisfaction); if (dessinBesoin == null && rel.Satisfaction != null) { dessinBesoin = new CDessinSatisfaction(niveauSuiv, rel.Satisfaction); niveauSuiv.AddSatisfactionVisible(dessinBesoin); } dessinsRacinesToRemove.Remove(dessinBesoin); } } } //retire les besoins racine qui doivent virer foreach (CDessinSatisfaction dessin in dessinsRacinesToRemove) { niveauSuiv.RemoveDessinPourToujours(dessin); } if (niveauSuiv.Dessins.Count() > 0) { RecalculeSuivants(niveauSuiv); } }
//--------------------------------------------------------------- public CDessinSatisfaction( CNiveauMapSatisfaction niveau, ISatisfactionBesoin satisfaction) { m_satisfaction = satisfaction; m_niveau = niveau; niveau.BaseSatisfactions.RegisterDessin(this); }
//--------------------------------------------------- public void RecalculePrecedents(CNiveauMapSatisfaction niveau) { //Récupère le niveau précédent CNiveauMapSatisfaction niveauPrec = null; foreach (CNiveauMapSatisfaction niveauAutre in m_listeNiveaux) { if (niveauAutre.NiveauSatisfaction == niveau.NiveauSatisfaction - 1) { niveauPrec = niveauAutre; break; } } if (niveauPrec == null) { //Création du niveau précédent niveauPrec = new CNiveauMapSatisfaction(this, niveau.NiveauSatisfaction - 1); m_listeNiveaux.Insert(0, niveauPrec); } HashSet <CDessinSatisfaction> dessinsRacinesToRemove = new HashSet <CDessinSatisfaction>(); foreach (CDessinSatisfaction dessin in niveauPrec.Dessins) { if (dessin.DessinParent == null) { dessinsRacinesToRemove.Add(dessin); } } foreach (CDessinSatisfaction dessin in niveau.Dessins) { foreach (CRelationBesoin_Satisfaction rel in dessin.Satisfaction.RelationsSatisfaits) { CDessinSatisfaction dessinBesoin = GetDessin(rel.Besoin); if (dessinBesoin == null) { dessinBesoin = new CDessinSatisfaction(niveauPrec, rel.Besoin); niveauPrec.AddSatisfactionVisible(dessinBesoin); } dessinsRacinesToRemove.Remove(dessinBesoin); } } //retire les besoins racine qui doivent virer foreach (CDessinSatisfaction dessin in dessinsRacinesToRemove) { niveauPrec.RemoveDessinPourToujours(dessin); } if (niveauPrec.Dessins.Count() > 0) { RecalculePrecedents(niveauPrec); } }
//--------------------------------------------------- internal void OnChangeNiveau(CNiveauMapSatisfaction niveauQuiABougé) { //Recalcule à partir du niveau 0 CNiveauMapSatisfaction niveau0 = null; foreach (CNiveauMapSatisfaction test in m_listeNiveaux) { if (test.NiveauSatisfaction == 0) { niveau0 = test; break; } } if (niveau0 != null) { RecalculePrecedents(niveau0); RecalculeSuivants(niveau0); CalculeDessin(); } }
//--------------------------------------------------- public void Init(List <ISatisfactionBesoin> lstSatisfactions) { m_dicSatisfactionToDessin = new Dictionary <ISatisfactionBesoin, CDessinSatisfaction>(); m_listeNiveaux = new List <CNiveauMapSatisfaction>(); //Création du niveau 0 CNiveauMapSatisfaction niveau = new CNiveauMapSatisfaction(this, 0); m_listeNiveaux.Add(niveau); foreach (ISatisfactionBesoin satisfaction in lstSatisfactions) { if (!IsDejaIntegréee(satisfaction)) { CDessinSatisfaction dessin = new CDessinSatisfaction(niveau, satisfaction); niveau.AddSatisfactionVisible(dessin); } } RecalculePrecedents(niveau); RecalculeSuivants(niveau); }