コード例 #1
0
        // ------------------------------------------------------------------
        // Update visuals for list of paragraphs.
        // ------------------------------------------------------------------
        internal static void UpdateParaListVisuals(
            PtsContext ptsContext,
            VisualCollection visualCollection,
            PTS.FSKUPDATE fskupdInherited,
            PTS.FSPARADESCRIPTION [] arrayParaDesc)
        {
            // For each paragraph, do following:
            // (1) Retrieve ParaClient object
            // (3) Update visual, if necessary
            for (int index = 0; index < arrayParaDesc.Length; index++)
            {
                // (1) Retrieve ParaClient object
                BaseParaClient paraClient = ptsContext.HandleToObject(arrayParaDesc[index].pfsparaclient) as BaseParaClient;
                PTS.ValidateHandle(paraClient);

                // (2) Update visual, if necessary
                PTS.FSKUPDATE fskupd = arrayParaDesc[index].fsupdinf.fskupd;
                if (fskupd == PTS.FSKUPDATE.fskupdInherited)
                {
                    fskupd = fskupdInherited;
                }
                if (fskupd == PTS.FSKUPDATE.fskupdNew)
                {
                    // Disconnect visual from its old parent, if necessary.
                    Visual currentParent = VisualTreeHelper.GetParent(paraClient.Visual) as Visual;
                    if (currentParent != null)
                    {
                        ContainerVisual parent = currentParent as ContainerVisual;
                        Invariant.Assert(parent != null, "parent should always derives from ContainerVisual");
                        parent.Children.Remove(paraClient.Visual);
                    }

                    // New paragraph - insert new visual node
                    visualCollection.Insert(index, paraClient.Visual);

                    paraClient.ValidateVisual(fskupd);
                }
                else
                {
                    // Remove visuals for non-existing paragraphs
                    while (visualCollection[index] != paraClient.Visual)
                    {
                        visualCollection.RemoveAt(index);
                        Invariant.Assert(index < visualCollection.Count);
                    }

                    if (fskupd == PTS.FSKUPDATE.fskupdChangeInside || fskupd == PTS.FSKUPDATE.fskupdShifted)
                    {
                        paraClient.ValidateVisual(fskupd);
                    }
                }
            }
            // Remove obsolete visuals
            if (arrayParaDesc.Length < visualCollection.Count)
            {
                visualCollection.RemoveRange(arrayParaDesc.Length, visualCollection.Count - arrayParaDesc.Length);
            }
        }
コード例 #2
0
 // Token: 0x06006930 RID: 26928 RVA: 0x001DC5E0 File Offset: 0x001DA7E0
 internal static void UpdateParaListVisuals(PtsContext ptsContext, VisualCollection visualCollection, PTS.FSKUPDATE fskupdInherited, PTS.FSPARADESCRIPTION[] arrayParaDesc)
 {
     for (int i = 0; i < arrayParaDesc.Length; i++)
     {
         BaseParaClient baseParaClient = ptsContext.HandleToObject(arrayParaDesc[i].pfsparaclient) as BaseParaClient;
         PTS.ValidateHandle(baseParaClient);
         PTS.FSKUPDATE fskupdate = arrayParaDesc[i].fsupdinf.fskupd;
         if (fskupdate == PTS.FSKUPDATE.fskupdInherited)
         {
             fskupdate = fskupdInherited;
         }
         if (fskupdate == PTS.FSKUPDATE.fskupdNew)
         {
             Visual visual = VisualTreeHelper.GetParent(baseParaClient.Visual) as Visual;
             if (visual != null)
             {
                 ContainerVisual containerVisual = visual as ContainerVisual;
                 Invariant.Assert(containerVisual != null, "parent should always derives from ContainerVisual");
                 containerVisual.Children.Remove(baseParaClient.Visual);
             }
             visualCollection.Insert(i, baseParaClient.Visual);
             baseParaClient.ValidateVisual(fskupdate);
         }
         else
         {
             while (visualCollection[i] != baseParaClient.Visual)
             {
                 visualCollection.RemoveAt(i);
                 Invariant.Assert(i < visualCollection.Count);
             }
             if (fskupdate == PTS.FSKUPDATE.fskupdChangeInside || fskupdate == PTS.FSKUPDATE.fskupdShifted)
             {
                 baseParaClient.ValidateVisual(fskupdate);
             }
         }
     }
     if (arrayParaDesc.Length < visualCollection.Count)
     {
         visualCollection.RemoveRange(arrayParaDesc.Length, visualCollection.Count - arrayParaDesc.Length);
     }
 }