コード例 #1
0
        int InitWrite(int iSpace, int iDeep)
        {
            int iLength               = GetWidth();
            int iChildWidth           = 0;
            int iMaxDeep              = ++iDeep;
            CTreeNodeWriteable pFirst = FirstChild();

            if (pFirst != null)
            {
                CTreeNodeWriteable pChild = pFirst;
                CTreeNodeWriteable pLast  = pFirst;

                while (pChild != null)
                {
                    iMaxDeep     = Math.Max(iMaxDeep, pChild.InitWrite(iSpace, iDeep));
                    iChildWidth += (pChild.m_sWidth + iSpace);
                    pLast        = pChild;
                    pChild       = pChild.RightBrother();
                }

                iChildWidth -= iSpace;

                int iFork  = ((pFirst.m_sFork + (iChildWidth - (pLast.m_sWidth - pLast.m_sFork))) / 2);
                int iStart = (iFork - (iLength - 1) / 2);
                int iWidth = iChildWidth;

                if (iStart < 0)
                {
                    iFork  -= iStart;
                    iWidth -= iStart;

                    for (CTreeNodeWriteable pFirstChild = FirstChild(); pFirstChild != null; pFirstChild = pFirstChild.FirstChild())
                    {
                        pFirstChild.m_sWidth = (short)(pFirstChild.m_sWidth - iStart);
                        pFirstChild.m_sFork  = (short)(pFirstChild.m_sFork - iStart);
                        pFirstChild.m_sStart = (short)(pFirstChild.m_sStart - iStart);
                    }

                    iStart = 0;
                }

                int iPad = iStart + iLength - iWidth;

                if (iPad > 0)
                {
                    iWidth += iPad;

                    for (CTreeNodeWriteable pLastChild = LastChild(); pLastChild != null; pLastChild = pLastChild.LastChild())
                    {
                        pLastChild.m_sWidth = (short)(pLastChild.m_sWidth + iPad);
                    }
                }

                m_sFork   = (short)iFork;
                m_sStart  = (short)iStart;
                m_sWidth  = (short)iWidth;
                m_sLength = (short)iLength;
            }
            else
            {
                m_sWidth  = (short)iLength;
                m_sStart  = 0;
                m_sLength = (short)iLength;
                m_sFork   = (short)((iLength + 1) / 2 - 1);
            }

            return(iMaxDeep);
        }