//--------------------------------------------------------------- private void CalculeFils() { m_listeFils = new List <CDessinSatisfaction>(); ISatisfactionBesoinAvecSousBesoins satB = Satisfaction as ISatisfactionBesoinAvecSousBesoins; if (satB != null) { foreach (CBesoin besoin in satB.GetSousBesoinsDeSatisfactionDirects()) { if (!m_niveau.BaseSatisfactions.IsDejaIntegréee(besoin)) { CDessinSatisfaction dessin = new CDessinSatisfaction(m_niveau, besoin); dessin.m_dessinParent = this; m_listeFils.Add(dessin); m_niveau.AddSatisfactionVisible(dessin); } } foreach (ISatisfactionBesoin sousSat in satB.GetSousSatisfactions()) { if (!m_niveau.BaseSatisfactions.IsDejaIntegréee(sousSat)) { CDessinSatisfaction dessin = new CDessinSatisfaction(m_niveau, sousSat); dessin.m_dessinParent = this; m_listeFils.Add(dessin); m_niveau.AddSatisfactionVisible(dessin); } } } }
//------------------------------------------------------ private Rectangle CalculeEnglobants(CNiveau niveau, ref int nIndexNext, int nIndexHierarchique) { ISatisfactionBesoin satisfaction = niveau.Satisfactions.ElementAt(nIndexNext); CInfoDessinSatisfaction dessin = null; m_dicSatisfactionToRect.TryGetValue(satisfaction, out dessin); Rectangle rctRetour = dessin.Rectangle; nIndexNext++; HashSet <ISatisfactionBesoin> besoinsFils = new HashSet <ISatisfactionBesoin>(); int nIndexStartFils = nIndexNext; ISatisfactionBesoinAvecSousBesoins satB = satisfaction as ISatisfactionBesoinAvecSousBesoins; if (satB != null && m_setSatisfactionsExpanded.Contains(satB)) { foreach (CBesoin besoin in satB.GetSousBesoinsDeSatisfaction()) { besoinsFils.Add(besoin); } } else if (satisfaction is CBesoin) { foreach (CBesoin besoin in ((CBesoin)satisfaction).BesoinsFils) { besoinsFils.Add(besoin); } } if (besoinsFils.Count > 0) { while (nIndexNext < niveau.Satisfactions.Count() && besoinsFils.Contains(niveau.Satisfactions.ElementAt(nIndexNext))) { Rectangle rctFils = CalculeEnglobants(niveau, ref nIndexNext, nIndexHierarchique + 1); rctRetour = Rectangle.Union(rctRetour, rctFils); } for (int nFils = nIndexStartFils; nFils < nIndexNext; nFils++) { ISatisfactionBesoin satFils = niveau.Satisfactions.ElementAt(nFils); CInfoDessinSatisfaction dessinFils = null; m_dicSatisfactionToRect.TryGetValue(satFils, out dessinFils); dessinFils.Offset(m_nOffestNiveau, 0); } rctRetour.Width += m_nOffestNiveau; dessin.Rectangle = new Rectangle(rctRetour.Left + m_nOffestNiveau / 3, rctRetour.Top, m_nLargeurNiveauDefaut, rctRetour.Height + 4); } dessin.NiveauHierarchique = nIndexHierarchique; return(rctRetour); }
//------------------------------------------------------ public void Init(ISatisfactionBesoin satisfaction) { m_satisfactionRacine = satisfaction; List <ISatisfactionBesoin> lst = new List <ISatisfactionBesoin>(); lst.Add(satisfaction); ISatisfactionBesoinAvecSousBesoins sab = satisfaction as ISatisfactionBesoinAvecSousBesoins; if (sab != null) { m_setSatisfactionsExpanded.Add(sab); } Init(lst); }
//------------------------------- public CInfoDessinSatisfaction( Rectangle rct, ISatisfactionBesoin satisfaction, bool bIsExpanded) { m_rectangle = rct; m_satisfaction = satisfaction; ISatisfactionBesoinAvecSousBesoins sab = satisfaction as ISatisfactionBesoinAvecSousBesoins; if (sab != null) { m_bHasChildren = sab.GetSousBesoinsDeSatisfaction().Count() != 0; } m_bIsExpanded = bIsExpanded; }
//------------------------------------------------------ public bool IsExpandable() { if (m_bIsExpandable == null) { ISatisfactionBesoinAvecSousBesoins satB = Satisfaction as ISatisfactionBesoinAvecSousBesoins; if (satB != null && satB.GetSousBesoinsDeSatisfactionDirects().Count() > 0) { m_bIsExpandable = true; } else { m_bIsExpandable = false; } } return(m_bIsExpandable.Value); }
//------------------------------------------------------------------------------ private void m_menuDetaillerSatisfaction_Click(object sender, EventArgs e) { ISatisfactionBesoinAvecSousBesoins sat = m_satisfactionSel as ISatisfactionBesoinAvecSousBesoins; if (sat != null) { if (m_setSatisfactionsExpanded.Contains(sat)) { m_setSatisfactionsExpanded.Remove(sat); } else { m_setSatisfactionsExpanded.Add(sat); } RefreshDessin(); } }
//----------------------------------------- private void AddSatisfaction( int nNiveauHierarchique, CControleMapBesoinOld controleMap, ISatisfactionBesoin satisfaction) { if (satisfaction != null && !controleMap.m_setSatisfactionsIntegrés.Contains(satisfaction)) { controleMap.m_setSatisfactionsIntegrés.Add(satisfaction); m_listeSatisfactions.Add(satisfaction); if (controleMap.m_setSatisfactionsExpanded.Contains(satisfaction)) { ISatisfactionBesoinAvecSousBesoins satB = satisfaction as ISatisfactionBesoinAvecSousBesoins; if (satB != null) { foreach (CBesoin besoin in satB.GetSousBesoinsDeSatisfaction()) { AddSatisfaction(nNiveauHierarchique + 1, controleMap, besoin); } } } } }
//------------------------------------------------------------------------------------------------------------------------------ private static void FillFlattenSatisfactionsHierarchy(ISatisfactionBesoin satisfaction, HashSet <ISatisfactionBesoin> set, HashSet <ISatisfactionBesoin> setSatFait) { if (setSatFait.Contains(satisfaction))//Déjà vu { return; } setSatFait.Add(satisfaction); set.Add(satisfaction); //Si c'est un besoin, ajoute les satisfactions de ce besoin CBesoin besoin = satisfaction as CBesoin; if (besoin != null) { foreach (CRelationBesoin_Satisfaction rel in besoin.RelationsSatisfactions) { if (rel.Satisfaction != null) { FillFlattenSatisfactionsHierarchy(rel.Satisfaction, set, setSatFait); } } } ISatisfactionBesoinAvecSousBesoins satSousBes = satisfaction as ISatisfactionBesoinAvecSousBesoins; if (satSousBes != null) { foreach (CBesoin sousBesoin in satSousBes.GetSousBesoinsDeSatisfactionDirects()) { FillFlattenSatisfactionsHierarchy(sousBesoin, set, setSatFait); } foreach (ISatisfactionBesoin sousSat in satSousBes.GetSousSatisfactions()) { FillFlattenSatisfactionsHierarchy(sousSat, set, setSatFait); } } }