📄 tree_widget.cs
字号:
}
}
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 + -