Ejemplo n.º 1
0
        protected override void SelectionChanged(IList <int> selectedIds)
        {
            if (selectedIds.Count > 0)
            {
                FrameItem(selectedIds[0]);

                var render = AssetTreeManager.mIns.GetGuiRender(EditorContexts.mIns.Mode);
                if (render != null)
                {
                    List <TreeViewItem> itemList = ListPool <TreeViewItem> .Get();

                    var rows = GetRows();
                    for (int i = 0; i < rows.Count; i++)
                    {
                        var rowdata = rows[i] as AssetTreeItem <T>;
                        if (rowdata != null && selectedIds.Contains(rowdata.id))
                        {
                            itemList.Add(rowdata);
                        }
                    }

                    foreach (var subrender in render)
                    {
                        if (subrender.TypeMode == _viewMode)
                        {
                            IGuiTree treeRender = subrender as IGuiTree;
                            if (treeRender != null)
                            {
                                treeRender.SelectionChanged(itemList);
                            }
                        }
                    }

                    //is searching
                    if (!string.IsNullOrEmpty(searchString))
                    {
                        IList <int> expandlist = GetExpanded();
                        if (expandlist != null)
                        {
                            List <int> list = new List <int>();
                            list.AddRange(expandlist);

                            Stack <int> stack = StackPool <int> .Get();

                            foreach (var item in itemList)
                            {
                                stack.Push(item.id);
                            }

                            while (stack.Count > 0)
                            {
                                var itemid = stack.Pop();
                                if (!list.Contains(itemid))
                                {
                                    list.Add(itemid);
                                    if (_model.HasParent(itemid))
                                    {
                                        var parents = _model.GetParent(itemid);
                                        foreach (var parent in parents)
                                        {
                                            if (!list.Contains(parent.Id) && parent.Id != _model.Root.Id)
                                            {
                                                stack.Push(parent.Id);
                                            }
                                        }

                                        ListPool <T> .Release(parents);
                                    }
                                }
                            }
                            StackPool <int> .Release(stack);

                            SetExpanded(list);
                        }
                    }

                    ListPool <TreeViewItem> .Release(itemList);
                }
                else
                {
                    base.SelectionChanged(selectedIds);
                }
            }
        }