⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree_widget.cs

📁 破解的飞信源代码
💻 CS
📖 第 1 页 / 共 5 页
字号:
            }
        }

        public tree<item_type>.iterator erase(tree<item_type>.iterator it, bool fRepaint)
        {
            tree<item_type>.iterator item = new tree<item_type>.iterator(true);
            this.remove_selected_item(it, false);
            bool flag = tree<item_type>.iterator.is_equal(this.m_focus_item, it);
            if (!flag)
            {
                if (!this.m_items.end.is_equal(this.focus_item))
                {
                    for (tree<item_type>.iterator iterator3 = this.m_items.parent(this.focus_item); !this.m_items.end.is_equal(iterator3) && !this.m_items.root.is_equal(iterator3); iterator3 = this.m_items.parent(iterator3))
                    {
                        if (iterator3.is_equal(it))
                        {
                            flag = true;
                            item.copy(this.m_items.end);
                            break;
                        }
                    }
                }
            }
            else
            {
                tree<item_type>.iterator clone;
                for (clone = it.clone; !this.m_items.end.is_equal(clone) && !this.m_items.root.is_equal(clone); clone = this.m_items.parent(clone))
                {
                    if (!this.m_items.end.is_equal(this.m_items.next_sibling(clone)))
                    {
                        item.copy(this.m_items.next_sibling(clone));
                        break;
                    }
                }
                if (item.is_end)
                {
                    clone = this.prev_visible_item(it);
                    if (!this.m_items.end.is_equal(clone) && !this.m_items.root.is_equal(clone))
                    {
                        item.copy(clone);
                    }
                }
            }
            bool flag2 = true;
            if (it.data != null)
            {
                it.data.dispose();
            }
            tree<item_type>.iterator iterator4 = this.m_items.erase(it);
            if (flag)
            {
                this.m_focus_item.reset();
                this.change_focus_item(item, true);
            }
            if (flag2)
            {
                this.m_hover_item.reset();
                this.change_hover_item(this.end, true);
            }
            if (fRepaint)
            {
                win32api_wrapper.PostMessage(base.Handle, 0x40a, (IntPtr) 2, IntPtr.Zero);
            }
            return iterator4;
        }

        public tree<item_type>.iterator first_child(tree<item_type>.iterator item)
        {
            return this.m_items.first_child(item);
        }

        public bool has_children(tree<item_type>.iterator it)
        {
            if (it == null)
            {
                return false;
            }
            if (tree<item_type>.iterator.is_equal(it, this.m_items.end))
            {
                return false;
            }
            return (this.m_items.end != this.m_items.first_child(it));
        }

        public tree<item_type>.iterator hittest_item(System.Drawing.Point pt)
        {
            if ((0 >= base.ClientRectangle.Width) || (0 >= base.ClientRectangle.Height))
            {
                return this.end;
            }
            MouseEventArgs context = new MouseEventArgs(MouseButtons.None, 0, pt.X, pt.Y, 0);
            return this.browse_items(new browse_item_handler(this.hittest_item_handler), context);
        }

        private void hittest_item_handler(browse_item_helper_arg arg)
        {
            this.hittest_item_handler(arg, HittestFlag.Default);
        }

        private void hittest_item_handler(browse_item_helper_arg arg, HittestFlag flag)
        {
            MouseEventArgs context = (MouseEventArgs) arg.context;
            Rectangle rcItem = arg.item.data.bounds;
            if (rcItem.Contains(context.X, context.Y))
            {
                arg.hitted = true;
                arg.cancel = true;
                switch (flag)
                {
                    case HittestFlag.MouseMove:
                        if (!this.m_fDragging)
                        {
                            arg.item.data.on_mousemove(context, rcItem);
                        }
                        return;

                    case HittestFlag.MouseDown:
                        arg.item.data.on_mousedown(context, rcItem);
                        if ((MouseButtons.Left == context.Button) || (MouseButtons.Right == context.Button))
                        {
                            this.m_fToggling = true;
                        }
                        if ((this.m_fEditable && (MouseButtons.Left == context.Button)) && tree<item_type>.iterator.is_equal(this.m_focus_item, arg.item))
                        {
                            this.m_fEditStartup = true;
                        }
                        return;

                    case HittestFlag.MouseUp:
                        this._handledMouseClick = arg.item.data.on_mouseup(context, rcItem);
                        if ((this.m_fEditable && (MouseButtons.Left == context.Button)) && (this.m_fEditStartup && tree<item_type>.iterator.is_equal(this.m_focus_item, arg.item)))
                        {
                            Rectangle rcEdit = rcItem;
                            string strInitText = string.Empty;
                            object obj2 = null;
                            bool fCancel = false;
                            this.m_fEditStartup = false;
                            this.m_focus_item.data.on_before_edit(rcItem, context.get_Location(), ref rcEdit, ref strInitText, ref obj2, ref fCancel);
                            if (fCancel)
                            {
                                return;
                            }
                            rcEdit.Inflate(-1, -2);
                            this.on_focus_edit(rcEdit, strInitText, obj2);
                        }
                        return;

                    case HittestFlag.MouseClick:
                        return;

                    case HittestFlag.MouseDbClick:
                        arg.item.data.on_mousedoubleclick(context, rcItem);
                        return;
                }
            }
            else if (rcItem.Top > context.Y)
            {
                arg.cancel = true;
            }
        }

        private void InitializeComponent()
        {
            base.SuspendLayout();
            this.BackColor = SystemColors.Window;
            base.Name = "tree_widget";
            base.Size = new Size(0x9d, 0xd4);
            base.ResumeLayout(false);
        }

        public tree<item_type>.iterator insert(item_type i, bool fRepaint)
        {
            return this.insert(i, tree<item_type>.ROOT, tree<item_type>.LAST, fRepaint);
        }

        public tree<item_type>.iterator insert(item_type i, tree<item_type>.iterator parent_item, bool fRepaint)
        {
            return this.insert(i, parent_item, tree<item_type>.LAST, fRepaint);
        }

        public tree<item_type>.iterator insert(item_type i, tree<item_type>.iterator parent_item, tree<item_type>.iterator prev_item, bool fRepaint)
        {
            if (this.m_items.empty)
            {
                this.m_root_item = new root_item_type();
                if (this.m_items.insert(this.m_root_item) == this.m_items.end)
                {
                    return this.m_items.end;
                }
            }
            tree<item_type>.iterator iterator = this.m_items.insert(i, parent_item, prev_item);
            if (iterator != this.m_items.end)
            {
                i.host = this;
                if (fRepaint)
                {
                    win32api_wrapper.PostMessage(base.Handle, 0x40a, (IntPtr) 2, IntPtr.Zero);
                }
            }
            return iterator;
        }

        public tree<item_type>.iterator last_child(tree<item_type>.iterator item)
        {
            return this.m_items.last_child(item);
        }

        private void LineScroll(bool fScrollDown, bool fRepaint)
        {
            if (!this.m_first_visible_item.is_end)
            {
                win32api_wrapper.SCROLLINFO si = new win32api_wrapper.SCROLLINFO();
                si.cbSize = 0x1c;
                si.fMask = 0x17;
                win32api_wrapper.GetScrollInfo(base.Handle, 1, ref si);
                if (fScrollDown)
                {
                    tree<item_type>.iterator iterator = this.next_visible_item(this.m_first_visible_item);
                    if (iterator.is_end)
                    {
                        si.nPos = si.nMax;
                    }
                    else
                    {
                        si.nPos += this.m_first_visible_item.data.bounds.Bottom;
                        if (iterator.data.ColoredBlock)
                        {
                            si.nPos += 5;
                        }
                        if (si.nPos > si.nMax)
                        {
                            si.nPos = si.nMax;
                        }
                    }
                }
                else
                {
                    int num = this.m_first_visible_item.data.bounds.Top - 1;
                    if (this.m_first_visible_item.data.ColoredBlock)
                    {
                        num -= 3;
                    }
                    if (num < 0)
                    {
                        si.nPos += num;
                    }
                    else
                    {
                        tree<item_type>.iterator iterator2 = this.prev_visible_item(this.m_first_visible_item);
                        if (!iterator2.is_end && !(iterator2.data is root_item_type))
                        {
                            num = iterator2.data.bounds.Top - 1;
                            if (iterator2.data.ColoredBlock)
                            {
                                num -= 3;
                            }
                            si.nPos += num;
                        }
                        else
                        {
                            si.nPos = si.nMin;
                        }
                    }
                    if (si.nPos < si.nMin)
                    {
                        si.nPos = si.nMin;
                    }
                }
                si.fMask = 4;
                win32api_wrapper.SetScrollInfo(base.Handle, 1, ref si, fRepaint);
                if (fRepaint)
                {
                    win32api_wrapper.PostMessage(base.Handle, 0x40a, (IntPtr) 2, IntPtr.Zero);
                }
            }
        }

        private void mousedoubleclick_handler(browse_item_helper_arg arg)
        {
            this.hittest_item_handler(arg, HittestFlag.MouseDbClick);
        }

        private void mousedown_handler(browse_item_helper_arg arg)
        {
            this.hittest_item_handler(arg, HittestFlag.MouseDown);
        }

        private void mousemove_handler(browse_item_helper_arg arg)
        {
            this.hittest_item_handler(arg, HittestFlag.MouseMove);
        }

        private void mouseup_handler(browse_item_helper_arg arg)
        {
            this.hittest_item_handler(arg, HittestFlag.MouseUp);
        }

        public tree<item_type>.iterator next_sibling(tree<item_type>.iterator item)
        {
            return this.m_items.next_sibling(item);
        }

        public tree<item_type>.iterator next_visible_item(tree<item_type>.iterator item)
        {
            tree<item_type>.iterator end = this.m_items.end;
            if (item != this.m_items.end)
            {
                try
                {
                    if (item.data.expand)
                    {
                        end = item.clone;
                        return tree<item_type>.iterator.op_Increment(end);
                    }
                    if (this.m_items.end != this.m_items.next_sibling(item))
                    {
                        return this.m_items.next_sibling(item);
                    }
                    for (tree<item_type>.iterator iterator2 = this.m_items.parent(item); this.m_items.end != iterator2; iterator2 = this.m_items.parent(iterator2))
                    {
                        tree<item_type>.iterator iterator3 = this.m_items.next_sibling(iterator2);
                        if (this.m_items.end != iterator3)
                        {
                            return iterator3;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -