Пример #1
0
        //---------------------------------------------------
        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);
            }
        }
Пример #2
0
 //---------------------------------------------------------------
 public CDessinSatisfaction(
     CNiveauMapSatisfaction niveau,
     ISatisfactionBesoin satisfaction)
 {
     m_satisfaction = satisfaction;
     m_niveau       = niveau;
     niveau.BaseSatisfactions.RegisterDessin(this);
 }
Пример #3
0
        //---------------------------------------------------
        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);
            }
        }
Пример #4
0
        //---------------------------------------------------
        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();
            }
        }
Пример #5
0
        //---------------------------------------------------
        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);
        }