示例#1
0
        /// <summary>
        /// 다른 item들의 위치를 변경시키지 않고 그냥 지운다.
        /// </summary>
        /// <param name="index"></param>
        public void RemoveAt(int index, bool eventEnabled)
        {
            BitItem itemToRemoved = _items[index];

            if (_items.ContainsKey(index))
            {
                _items.Remove(index);
                if (_bitArea != null)
                {
                    for (int i = itemToRemoved.StartOffset; i < itemToRemoved.StartOffset + itemToRemoved.BitSize; i++)
                    {
                        _bitArea[i] = -1;
                    }
                }
            }
            else
            {
                throw new Exception("BitItemCollection.RemoveAt - no item in index[" + index + "]");
            }
            if (E_BitItemRemoved != null && eventEnabled)
            {
                E_BitItemRemoved(_parent, itemToRemoved);
            }
        }
        public wTreeNode this[int index]
        {
            get
            {
                if (index < _list.Count && index >= 0)
                {
                    return(_list.ValueList[index]);
                }
                else
                {
                    return(null);
                }
            }
            set
            {
                if (index <= _list.Count && index >= 0)
                {
                    if (_list.ContainsKey(value.Name))           //같은이름이 존재하면.
                    {
                        if (_list[value.Name].Index != index)    //그런데 다른 인덱스에 있는 Node라면..
                        {
                            if (_list[value.Name].Equals(value)) //같은 인스턴스이면..
                            {
                                throw new Exception("Remove the node[" + value.Name + "] from this collection before assign in the other position...");
                            }
                            else //인스턴스가 다르다면 이름만 같은 것.
                            {
                                throw new Exception("the name to insert already exists in this collection - index:" + _list[value.Name].Index);
                            }
                        }
                        else //같은 인덱스에 같은 이름으로 넣으려고 하면..
                        {
                            if (_list.ValueList[index].Equals(value)) //같은 인스턴스라면 넣을 필요 없다.
                            {
                                //do nothing..
                            }
                            else //다른 인스턴스라면..이름만 같고 다른 인스턴스이므로 기존의 것을 지워준다.
                            {
                                whenReleaseNode(_list[value.Name]);//기존것의 연결을 끊음.
                                _list.Remove(value.Name);//리스트에서 삭제..
                                _list.Insert(value.Name, value, index);
                                whenAddNode(value);
                                if (E_TreeNodeChanged != null)
                                {
                                    E_TreeNodeChanged(value, null);
                                }
                            }
                        }
                    }
                    else //같은 이름이 존재하지 않으면..해당 index에 완전히 새로운 것을 넣어주는 것이다.
                    {
                        if (index < _list.Count) //index가 count와 같으면 지울 것이 없다.
                        {
                            wTreeNode nodeToRemove = _list.ValueList[index];
                            whenReleaseNode(nodeToRemove);   //기존것의 연결을 끊음.
                            _list.Remove(nodeToRemove.Name); //리스트에서 삭제..
                            _list.Insert(value.Name, value, index);
                            whenAddNode(value);
                            if (E_TreeNodeChanged != null)
                            {
                                E_TreeNodeChanged(value, null);
                            }
                        }
                        else
                        {
                            _list.Add(value.Name, value);
                            whenAddNode(value);
                            if (E_TreeListChanged != null)
                            {
                                E_TreeListChanged(_parent);                           //새로 넣은 것이므로 리스트가 바뀌었슴.
                            }
                        }
                    }
                }

                else
                {
                    throw new Exception("wTree error: wTree[" + index + "] doesn't exist..");
                }
            }
        }