//------------------------------------------------------ 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 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; }
//----------------------------------------- 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); } } } } }