Пример #1
0
        //------------------------------------------------------
        private void CalculeEnglobants(CNiveau niveau)
        {
            int nIndex    = 0;
            int nMaxWidth = 0;

            while (nIndex < niveau.Satisfactions.Count())
            {
                Rectangle rct = CalculeEnglobants(niveau, ref nIndex, 0);
                nMaxWidth = Math.Max(nMaxWidth, rct.Width);
            }
            int nOffset = nMaxWidth - m_nLargeurNiveauDefaut;

            if (nOffset > 0)
            {
                foreach (CNiveau autreNiveau in m_listeNiveaux)
                {
                    if (autreNiveau.Niveau > niveau.Niveau)
                    {
                        foreach (ISatisfactionBesoin sat in autreNiveau.Satisfactions)
                        {
                            CInfoDessinSatisfaction dessin = null;
                            m_dicSatisfactionToRect.TryGetValue(sat, out dessin);
                            dessin.Offset(nOffset, 0);
                        }
                    }
                }
            }
        }
Пример #2
0
        //------------------------------------------------------
        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);
        }