public bool ForEach(Func <CadObjTreeItem, int, bool> func, int level) { if (!func(this, level)) { return(false); } if (!IsExpand) { return(true); } if (mChildren == null) { return(true); } int i; for (i = 0; i < mChildren.Count; i++) { CadObjTreeItem item = mChildren[i]; if (!item.ForEach(func, level + 1)) { return(false); } } return(true); }
protected virtual void OnCheckChanged(CadObjTreeItem item) { if (CheckChanged != null) { CheckChanged(item); } }
public void AttachRoot(CadObjTreeItem root) { mRoot = root; mRoot.IsExpand = true; RecalcSize(); }
public virtual void Add(CadObjTreeItem item) { if (mChildren == null) { mChildren = new List <CadObjTreeItem>(); } item.Parent = this; mChildren.Add(item); }
public int GetLevel() { int i = 0; CadObjTreeItem parent = Parent; while (parent != null) { i++; parent = parent.Parent; } return(i); }
public void ForEachAll(Action <CadObjTreeItem> action) { action(this); if (mChildren == null) { return; } int i; for (i = 0; i < mChildren.Count; i++) { CadObjTreeItem item = mChildren[i]; item.ForEachAll(action); } }
public CadObjTreeItem GetAt(int n) { int i = 0; CadObjTreeItem ret = null; ForEach(item => { if (n == i) { ret = item; return(false); } i++; return(true); }); return(ret); }
protected void CadObjectTree_MouseDown(object sender, MouseButtonEventArgs e) { Point p = e.GetPosition(this); int idx = (int)(p.Y / mItemHeight); if (!ShowRoot) { idx++; } CadObjTreeItem item = mRoot.GetAt(idx); if (item == null) { return; } if (e.RightButton == MouseButtonState.Pressed) { mRoot.ForEachAll((v) => { v.IsChecked = false; }); item.IsChecked = true; OnCheckChanged(item); if (ItemCommand != null) { mContextMenu.Items.Clear(); List <MenuItem> list = item.GetContextMenuItems(); if (list != null) { foreach (MenuItem m in list) { SetupContextMenuItem(m); mContextMenu.Items.Add(m); } } if (mContextMenu.Items.Count > 0) { ContextMenu = mContextMenu; } else { ContextMenu = null; } base.OnMouseDown(e); } } else { if (!CadKeyboard.IsCtrlKeyDown()) { mRoot.ForEachAll((v) => { v.IsChecked = false; }); } int level = item.GetLevel(); if (item.Children != null) { if (p.X > (level) * mIndentSize) { item.IsChecked = item.IsChecked == false; OnCheckChanged(item); } else { item.IsExpand = item.IsExpand == false; RecalcSize(); } } else { item.IsChecked = item.IsChecked == false; OnCheckChanged(item); } } InvalidateVisual(); }