// Token: 0x060073CD RID: 29645 RVA: 0x00212084 File Offset: 0x00210284
        private void RestoreGrouping(LiveShapingItem lsi, CollectionViewGroupRoot.GroupTreeNode node, int level, List <AbandonedGroupItem> deleteList)
        {
            if (node.ContainsItem)
            {
                object obj = this.GetGroupName(lsi.Item, node.Group.GroupBy, level);
                if (obj == CollectionViewGroupRoot.UseAsItemDirectly)
                {
                    goto IL_12E;
                }
                ICollection collection = obj as ICollection;
                ArrayList   arrayList  = (collection == null) ? null : new ArrayList(collection);
                for (CollectionViewGroupRoot.GroupTreeNode groupTreeNode = node.FirstChild; groupTreeNode != null; groupTreeNode = groupTreeNode.Sibling)
                {
                    if (arrayList == null)
                    {
                        if (object.Equals(obj, groupTreeNode.Group.Name))
                        {
                            groupTreeNode.ContainsItem = true;
                            obj = DependencyProperty.UnsetValue;
                            break;
                        }
                    }
                    else if (arrayList.Contains(groupTreeNode.Group.Name))
                    {
                        groupTreeNode.ContainsItem = true;
                        arrayList.Remove(groupTreeNode.Group.Name);
                    }
                }
                if (arrayList == null)
                {
                    if (obj != DependencyProperty.UnsetValue)
                    {
                        this.AddToSubgroup(lsi.Item, lsi, node.Group, level, obj, false);
                        goto IL_12E;
                    }
                    goto IL_12E;
                }
                else
                {
                    using (IEnumerator enumerator = arrayList.GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            object name = enumerator.Current;
                            this.AddToSubgroup(lsi.Item, lsi, node.Group, level, name, false);
                        }
                        goto IL_12E;
                    }
                }
            }
            if (node.ContainsItemDirectly)
            {
                deleteList.Add(new AbandonedGroupItem(lsi, node.Group));
            }
IL_12E:
            for (CollectionViewGroupRoot.GroupTreeNode groupTreeNode2 = node.FirstChild; groupTreeNode2 != null; groupTreeNode2 = groupTreeNode2.Sibling)
            {
                this.RestoreGrouping(lsi, groupTreeNode2, level + 1, deleteList);
            }
        }
        // Token: 0x060073CE RID: 29646 RVA: 0x002121F4 File Offset: 0x002103F4
        private CollectionViewGroupRoot.GroupTreeNode BuildGroupTree(LiveShapingItem lsi)
        {
            CollectionViewGroupInternal collectionViewGroupInternal = lsi.ParentGroup;

            if (collectionViewGroupInternal != null)
            {
                CollectionViewGroupRoot.GroupTreeNode groupTreeNode = new CollectionViewGroupRoot.GroupTreeNode
                {
                    Group = collectionViewGroupInternal,
                    ContainsItemDirectly = true
                };
                for (;;)
                {
                    CollectionViewGroupInternal collectionViewGroupInternal2 = collectionViewGroupInternal;
                    collectionViewGroupInternal = collectionViewGroupInternal2.Parent;
                    if (collectionViewGroupInternal == null)
                    {
                        break;
                    }
                    CollectionViewGroupRoot.GroupTreeNode groupTreeNode2 = new CollectionViewGroupRoot.GroupTreeNode
                    {
                        Group      = collectionViewGroupInternal,
                        FirstChild = groupTreeNode
                    };
                    groupTreeNode = groupTreeNode2;
                }
                return(groupTreeNode);
            }
            List <CollectionViewGroupInternal>           parentGroups = lsi.ParentGroups;
            List <CollectionViewGroupRoot.GroupTreeNode> list         = new List <CollectionViewGroupRoot.GroupTreeNode>(parentGroups.Count + 1);

            CollectionViewGroupRoot.GroupTreeNode result = null;
            foreach (CollectionViewGroupInternal group in parentGroups)
            {
                CollectionViewGroupRoot.GroupTreeNode groupTreeNode = new CollectionViewGroupRoot.GroupTreeNode
                {
                    Group = group,
                    ContainsItemDirectly = true
                };
                list.Add(groupTreeNode);
            }
            for (int i = 0; i < list.Count; i++)
            {
                CollectionViewGroupRoot.GroupTreeNode groupTreeNode = list[i];
                collectionViewGroupInternal = groupTreeNode.Group.Parent;
                CollectionViewGroupRoot.GroupTreeNode groupTreeNode3 = null;
                if (collectionViewGroupInternal == null)
                {
                    result = groupTreeNode;
                }
                else
                {
                    for (int j = list.Count - 1; j >= 0; j--)
                    {
                        if (list[j].Group == collectionViewGroupInternal)
                        {
                            groupTreeNode3 = list[j];
                            break;
                        }
                    }
                    if (groupTreeNode3 == null)
                    {
                        groupTreeNode3 = new CollectionViewGroupRoot.GroupTreeNode
                        {
                            Group      = collectionViewGroupInternal,
                            FirstChild = groupTreeNode
                        };
                        list.Add(groupTreeNode3);
                    }
                    else
                    {
                        groupTreeNode.Sibling     = groupTreeNode3.FirstChild;
                        groupTreeNode3.FirstChild = groupTreeNode;
                    }
                }
            }
            return(result);
        }
 // Token: 0x060073CC RID: 29644 RVA: 0x0021205C File Offset: 0x0021025C
 internal void RestoreGrouping(LiveShapingItem lsi, List <AbandonedGroupItem> deleteList)
 {
     CollectionViewGroupRoot.GroupTreeNode groupTreeNode = this.BuildGroupTree(lsi);
     groupTreeNode.ContainsItem = true;
     this.RestoreGrouping(lsi, groupTreeNode, 0, deleteList);
 }