private void EventTrigger_Selected(object sender, RoutedEventArgs e) { VerifyAccess(); TreeViewItem item = sender as TreeViewItem; TreeTableNode tr = item.Header as TreeTableNode; tr.Checked = true; }
void variablesListView_NodeOpened(TreeTableNode node) { VariableDetails details = (VariableDetails)node.Tag; mDebugger.Manager.StartProgressBarMarquee(); mDebugger.ConnectedTarget.ExpandLocal(details.MakePath()); mDebugger.ConnectedTarget.RetrieveLocals(mDebugger.CurrentThread, mDebugger.CurrentStackFrame.Depth); }
private void NewWatch() { TreeTableNode node = new TreeTableNode(""); node.SubItems.Add(""); node.SubItems.Add(""); node.Font = mBoldFont; variablesListView.Root.Items.Add(node); node.BeginEdit(0); }
private void menuEditWatch_Click(object sender, EventArgs e) { if (variablesListView.SelectedIndices.Count == 1) { TreeTableNode node = variablesListView.Nodes[variablesListView.SelectedIndices[0]]; if (node.Parent == variablesListView.Root) { node.BeginEdit(0); } } }
private void DeleteWatch(TreeTableNode node) { VariableDetails varInfo = (VariableDetails)node.Tag; WatchDetails watch = mDebugger.FindWatch(varInfo.WatchID); if (watch != null) { mDebugger.RemoveWatch(watch); } node.Parent.Items.Remove(node); }
private void UpdateFilterRecursive(TreeTableNode root) { foreach (TreeTableNode child in root.Items) { VariableDetails details = (VariableDetails)child.Tag; child.Visible = IsVariableVisible(details); child.Expandable = details.HasEntries || (details.HasMetadata && ShowMetadata); UpdateFilterRecursive(child); } }
void variablesListView_NodeClosed(TreeTableNode node) { VariableDetails details = (VariableDetails)node.Tag; if (!mUpdateInProgress && mDebugger.ConnectedTarget != null && mDebugger.CurrentStackFrame != null) { mDebugger.Manager.StartProgressBarMarquee(); mDebugger.ConnectedTarget.CloseWatch(details.WatchID, details.MakePath()); mDebugger.ConnectedTarget.UpdateWatch(details.WatchID, mDebugger.CurrentThread, mDebugger.CurrentStackFrame.Depth); } }
public TreeTable() { InitializeComponent(); m_root = new TreeTableNode(); m_root.InternalSetOwner(this); m_nodes = new List<TreeTableNode>(); m_keyhash = new Dictionary<string, TreeTableNode>(); listView1.BeforeLabelEdit += new LabelEditEventHandler(listView1_BeforeLabelEdit); listView1.AfterLabelEdit += new LabelEditEventHandler(listView1_AfterLabelEdit); }
private void variablesListView_BeforeLabelEdit(object sender, LabelEditEventArgs e) { TreeTableNode node = variablesListView.Nodes[e.Item]; if (node.Parent != variablesListView.Root) { e.CancelEdit = true; } else { contextMenuStrip.Enabled = false; toolStrip1.Enabled = false; m_editInProgress = true; } }
public TreeTableNode getNodeByText(String TextPath, String seperator = ".") { String[] texts = TextPath.Split(seperator.ToCharArray()); int depth = 0; TreeTableNode node = null; if (Items.Count > 0) { for (int i = 0; i < Items.Count; i++) { if (Items[i].Text.Equals(texts[depth])) { depth++; node = Items[i]; break; } } if (node == null) { return(null); } } else { return(null); } while (node.Children.Count > 0 && texts.Length > depth) { for (int i = 0; i < node.Children.Count; i++) { if (node.Children[i].Text.Equals(texts[depth])) { depth++; node = node.Children[i]; break; } } } if (texts.Length == depth) { return(node); } else { return(null); } }
void Test() { VerifyAccess(); TreeTableNode gst = new TreeTableNode("pGST", false); for (int j = 0; j < 4; j++) { TreeTableNode model = new TreeTableNode("model" + j, false); for (int i = 0; i < 4; i++) { model.AddChild(new TreeTableNode("var" + i, false)); } gst.AddChild(model); } this.Items.Add(gst); }
/* * Boolean _mouseOverDispatched = false; * void MouseEnter(Object sender, RoutedEventArgs e) * { * _clickSender = sender; * _clickEventArg = e; * DelFunc func = OnMouseOver; * Dispatcher.Invoke(DispatcherPriority.Normal, new Action(func)); * if (_mouseOverDispatched == false) OnMouseOver(); * _mouseOverDispatched = false; * } * * void OnMouseOver() * { * object sender = _clickSender; * RoutedEventArgs e = _clickEventArg; * * ContentPresenter p = null; * TreeViewItem item = null; * TreeNode up = null; * try * { * if (e.OriginalSource is TextBlock) * { * //p = (e.OriginalSource as TextBlock).TemplatedParent as ContentPresenter; * p = (e.OriginalSource as TextBlock).TemplatedParent as ContentPresenter; * } * else if (e.OriginalSource is Rectangle) * { * if ((e.OriginalSource as Rectangle).TemplatedParent is ContentPresenter) * { * p = (e.OriginalSource as Rectangle).TemplatedParent as ContentPresenter; * } * else * { * item = (e.OriginalSource as Rectangle).TemplatedParent as TreeViewItem; * } * } * else if(e.OriginalSource is TreeViewItem) * { * item = e.OriginalSource as TreeViewItem; * }else if(e.OriginalSource is TreeView){ * TreeView view = (e.OriginalSource as TreeView); * }else{ * return; * } * if (item != null) * { * up = item.Header as TreeNode; * (item.Parent as Grid).Children[0].Visibility = System.Windows.Visibility.Hidden; * } * else * { * up = p.Content as TreeNode; * (p.Parent as Grid).Children[0].Visibility = System.Windows.Visibility.Hidden; * } * } * catch * { * * } * finally * { * _mouseOverDispatched = true; * } * } */ void addItemForTest() { //VerifyAccess(); List <TreeTableNode> newlist = new List <TreeTableNode>(this.Items); for (int j = 0; j < 1; j++) { TreeTableNode model = new TreeTableNode("Tree" + j, false); for (int i = 0; i < 2; i++) { model.AddChild(new TreeTableNode("TreeNode" + i, false)); } newlist[0].AddChild(model); } this.Items = newlist; }
private TreeTableNode AddWatch(string expression, int index) { WatchDetails watch = mDebugger.AddWatch(expression); TreeTableNode node = AddVariable(new VariableDetails(watch.ID, new LuaValue[] { }, null, null, false, false, false, false, VariableClass.Watch)); node.Font = mBoldFont; if (index < 0) { variablesListView.Root.Items.Add(node); } else { variablesListView.Root.Items.Insert(index, node); } node.Text = expression; return(node); }
protected virtual void RunWhenEndNodeClicked(TreeTableNode endNode) { //endNode.Checked = endNode.Checked; if (endNode.Checked == true) { endNode.Checked = false; } else if (endNode.Checked == false) { endNode.Checked = true; } else //null { endNode.Checked = true; } //if (endNode.Parent != null) // endNode.Parent.CheckSelf(); }
protected TreeTableNode AddVariable(VariableDetails varInfo) { string value = ""; string type = ""; if (varInfo.Value != null) { value = QuoteValueString(varInfo.Value); type = varInfo.Value.Type.ToString(); } TreeTableNode node = new TreeTableNode(mDebugger.GetValueString(varInfo.Key)); node.Key = varInfo.ToString(); node.Tag = varInfo; node.SubItems.Add(value); node.SubItems.Add(type); if (varInfo.VariableClass == VariableClass.Upvalue) { node.Font = mBoldFont; } if (varInfo.Key != null) { if (varInfo.Key.Type == LuaValueType.TILDE_ENVIRONMENT || varInfo.Key.Type == LuaValueType.TILDE_METATABLE || varInfo.Key.Type == LuaValueType.TILDE_UPVALUES) { node.Font = mItalicFont; } } if (varInfo.Value != null) { node.Expandable = varInfo.HasEntries || (varInfo.HasMetadata && ShowMetadata); node.Expanded = varInfo.Expanded; } return(node); }
private void DeleteSelectedWatches() { List <TreeTableNode> selection = new List <TreeTableNode>(); foreach (int index in variablesListView.SelectedIndices) { TreeTableNode node = variablesListView.Nodes[index]; if (node.Parent == variablesListView.Root) { selection.Add(node); } } foreach (TreeTableNode node in selection) { DeleteWatch(node); } if (mDebugger.ConnectedTarget != null && mDebugger.CurrentStackFrame != null) { mDebugger.ConnectedTarget.RetrieveWatches(mDebugger.CurrentThread, mDebugger.CurrentStackFrame.Depth); } }
void CheckBoxClicked(object sender, RoutedEventArgs e) { VerifyAccess(); if (_isChecking || TreeTableNode.IsChecking()) { return; } _isChecking = true; //무한루프를 막기위함.. CheckBox c = sender as CheckBox; ContentPresenter p = c.TemplatedParent as ContentPresenter; TreeTableNode treeNode; TreeViewItem item = null;// = WpfFinder.getParentFromTemplate(c, DependencyObjectType.FromSystemType(typeof(TreeViewItem))) as TreeViewItem; //try //{ if (p == null) { item = c.TemplatedParent as TreeViewItem; treeNode = item.Header as TreeTableNode; } else { treeNode = p.Content as TreeTableNode; } /* * if (treeNode.Enabled && treeNode.Children.Count > 0) * { * if (treeNode.Checked != null) * { * treeNode.CheckRecursive(c.IsChecked); * } * else * { * treeNode.CheckRecursive(true); * } * //if (treeNode.Parent != null) treeNode.Parent.CheckSelf(); * } */ //L_Title.Content = c.Name; //MessageBox.Show(c.Name); List <TreeTableNode> Added = new List <TreeTableNode>(); List <TreeTableNode> Removed = new List <TreeTableNode>(); List <TreeTableNode> Selected = new List <TreeTableNode>(); if (treeNode.Children.Count == 0 && treeNode.Parent != null) //endNode { if (BeforeClickedParent != treeNode.Parent) { BeforeClickedParent = null; BeforeClickedRow = -1; } int row_index = treeNode.Parent.IndexOfChild(treeNode); if (E_OnNodeClicked != null && treeNode.Enabled == true) { E_OnNodeClicked(this, new TreeNodeClickEventArg(treeNode.Path, treeNode.IndexPath, treeNode.Checked, treeNode, item, p)); } if ((System.Windows.Input.Keyboard.GetKeyStates(Key.LeftShift) & KeyStates.Down) == KeyStates.Down) { if (BeforeClickedRow >= 0) { int min = (BeforeClickedRow < row_index) ? BeforeClickedRow : row_index; int max = (BeforeClickedRow < row_index) ? row_index : BeforeClickedRow; for (int i = min; i <= max; i++) { TreeTableNode child = treeNode.Parent.Children[i]; if (child.Enabled) { if (E_OnNodeChecked != null && child.Checked != true) { Added.Add(child); } treeNode.Parent.Children[i].Checked = true; } } if (E_OnNodeChecked != null) { Selected = treeNode.SelectedSiblings; } if (E_OnNodeChecked != null) { E_OnNodeChecked(this, new TreeNodeCheckedEventArg(Selected, Added, Removed)); } } } else if ((System.Windows.Input.Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) == KeyStates.Down) { if (BeforeClickedRow >= 0) { int min = (BeforeClickedRow < row_index) ? BeforeClickedRow : row_index; int max = (BeforeClickedRow < row_index) ? row_index : BeforeClickedRow; for (int i = min; i <= max; i++) { TreeTableNode child = treeNode.Parent.Children[i]; if (child.Enabled) { if (E_OnNodeChecked != null && child.Checked != false) { Removed.Add(child); } treeNode.Parent.Children[i].Checked = false; } } if (E_OnNodeChecked != null) { Selected = treeNode.SelectedSiblings; } if (E_OnNodeChecked != null) { E_OnNodeChecked(this, new TreeNodeCheckedEventArg(Selected, Added, Removed)); } } } else { BeforeClickedRow = row_index; BeforeClickedParent = treeNode.Parent; if (treeNode.Checked == true) { Added.Add(treeNode); } else if (treeNode.Checked == false) { Removed.Add(treeNode); } if (E_OnNodeChecked != null) { Selected = treeNode.SelectedSiblings; } if (E_OnNodeChecked != null) { E_OnNodeChecked(this, new TreeNodeCheckedEventArg(Selected, Added, Removed)); } } } else //부모노드일때 { treeNode.CheckRecursive(treeNode.Checked, Added, Removed, Selected); if (E_OnNodeChecked != null) { E_OnNodeChecked(this, new TreeNodeCheckedEventArg(Selected, Added, Removed)); } } treeNode.CheckSelf(); //RunWhenEndNodeClicked(treeNode); //} //catch //{ // _isChecking = false; // return; //} _isChecking = false; }
private void OnNodeClosed(TreeTableNode node) { if (!m_updateInProgress && NodeClosed != null) NodeClosed(node); }
internal void NodeChangedKey(TreeTableNode item, string oldKey) { if (oldKey != "") { System.Diagnostics.Debug.Assert(m_keyhash.ContainsKey(oldKey)); m_keyhash.Remove(oldKey); } if (item.Key != "") { System.Diagnostics.Debug.Assert(!m_keyhash.ContainsKey(oldKey)); m_keyhash.Add(item.Key, item); } }
internal void NodeAdded(TreeTableNode item) { AddToHashRecursive(item); UpdateItems(); }
protected void UpdateVariable(VariableDetails varInfo) { if (variablesListView.ContainsKey(varInfo.ToString())) { TreeTableNode node = variablesListView[varInfo.ToString()]; node.Tag = varInfo; if (!varInfo.Valid) { node.Items.Clear(); // Only remove the variable if it's not a root watch expression if (varInfo.WatchID > 0 && varInfo.Path.Length == 0) { node.ForeColor = SystemColors.InactiveCaptionText; node.SubItems[1].Text = QuoteValueString(varInfo.Value); node.SubItems[2].Text = varInfo.Value.Type.ToString(); } else { node.Parent.Items.Remove(node); } } else { node.Expandable = varInfo.HasEntries || (varInfo.HasMetadata && ShowMetadata); node.Expanded = varInfo.Expanded; string value = QuoteValueString(varInfo.Value); if (!varInfo.Expanded) { node.Items.Clear(); } if (varInfo.Value.Type == LuaValueType.NONE) { node.Items.Clear(); node.ForeColor = SystemColors.InactiveCaptionText; } else if (node.SubItems[1].Text != value || node.SubItems[2].Text != varInfo.Value.Type.ToString()) { node.ForeColor = Color.Red; node.SubItems[1].Text = value; node.SubItems[2].Text = varInfo.Value.Type.ToString(); } else { node.ForeColor = variablesListView.ForeColor; } } node.Visible = IsVariableVisible(varInfo); } else if (varInfo.Valid && (varInfo.WatchID == 0 || mDebugger.FindWatch(varInfo.WatchID) != null)) { TreeTableNode parent = FindClosestAncestor(varInfo); TreeTableNode node = AddVariable(varInfo); parent.Items.Insert(node, mNodeComparer); node.Visible = IsVariableVisible(varInfo); } }
private int UpdateItemsRecursive(TreeTableNode root, int nextIndex, int depth) { foreach (TreeTableNode child in root.Items) { if (!child.Visible) { child.InternalSetVirtualIndex(-1); HideItemsRecursive(child); } else { child.Depth = depth; child.InternalSetVirtualIndex(nextIndex++); m_nodes.Add(child); if (child.Expandable && child.Expanded) nextIndex = UpdateItemsRecursive(child, nextIndex, depth + 1); else HideItemsRecursive(child); } } return nextIndex; }
internal void AddToHashRecursive(TreeTableNode root) { if (root.Key != "") { System.Diagnostics.Debug.Assert(!m_keyhash.ContainsKey(root.Key)); m_keyhash.Add(root.Key, root); } foreach (TreeTableNode node in root.Items) { AddToHashRecursive(node); } }
internal void InvalidateNode(TreeTableNode node) { if (node.VirtualIndex >= 0) { if (m_updateInProgress) m_updateDirty = true; else { Rectangle bounds = listView1.GetItemRect(node.VirtualIndex, ItemBoundsPortion.Entire); listView1.Invalidate(bounds); } } }
internal void NodeChangedSubItem(TreeTableNode node) { InvalidateNode(node); }
internal void NodeReplaced(TreeTableNode oldItem, TreeTableNode newItem) { RemoveFromHashRecursive(oldItem); AddToHashRecursive(newItem); UpdateItems(); }
internal void NodeRemoved(TreeTableNode item) { RemoveFromHashRecursive(item); UpdateItems(); }
private void HideItemsRecursive(TreeTableNode root) { foreach (TreeTableNode child in root.Items) { child.InternalSetVirtualIndex(-1); HideItemsRecursive(child); } }
internal void NodeChangedExpanded(TreeTableNode item) { if (item.Expanded) OnNodeOpened(item); else OnNodeClosed(item); UpdateItems(); }
void OnClick() //this function is called by Timer.. { //VerifyAccess(); if (clickArg.Count != 2) { return; } object sender = clickArg.Sender; RoutedEventArgs e = clickArg.MouseBtnArgs; ContentPresenter p = null; TreeViewItem item = null; TreeTableNode treeNode = null; FrameworkElement fe = e.OriginalSource as FrameworkElement; if (fe.TemplatedParent is ContentPresenter) { p = fe.TemplatedParent as ContentPresenter; } else if (fe.TemplatedParent is TreeViewItem) { item = fe.TemplatedParent as TreeViewItem; } else { return; } /* * if (e.OriginalSource is TextBlock) * { * //p = (e.OriginalSource as TextBlock).TemplatedParent as ContentPresenter; * p = (e.OriginalSource as TextBlock).TemplatedParent as ContentPresenter; * * } * else if (e.OriginalSource is Rectangle) * { * if ((e.OriginalSource as Rectangle).TemplatedParent is ContentPresenter) * { * p = (e.OriginalSource as Rectangle).TemplatedParent as ContentPresenter; * } * else * { * item = (e.OriginalSource as Rectangle).TemplatedParent as TreeViewItem; * } * } * else * { * return; * } */ //try { if (item != null) { if (item.Items.Count > 0) { item.Tag = "Parent"; } treeNode = item.Header as TreeTableNode; } else { treeNode = p.Content as TreeTableNode; } if (treeNode.Enabled) { if (treeNode.Children.Count > 0) { //(p.Parent as Grid).Children[0].Visibility = System.Windows.Visibility.Hidden; RunWhenParentNodeClicked(treeNode); } else { RunWhenEndNodeClicked(treeNode); } if (E_OnNodeClicked != null && treeNode.Enabled) { E_OnNodeClicked(this, new TreeNodeClickEventArg(treeNode.Path, treeNode.IndexPath, treeNode.Checked, treeNode, item, p)); } } } //catch { } }
protected virtual void RunWhenParentNodeClicked(TreeTableNode parentNode) { //addItemForTest(); //forTest }
private void variablesListView_AfterLabelEdit(object sender, LabelEditEventArgs e) { m_editInProgress = false; contextMenuStrip.Enabled = true; toolStrip1.Enabled = true; TreeTableNode node = variablesListView.Nodes[e.Item]; string expression = e.Label == null ? "" : e.Label.Trim(); variablesListView.BeginUpdate(); // Did the user cancel adding a new watch? if (node.Text == "" && expression == "") { e.CancelEdit = true; node.Parent.Items.Remove(node); } // Did the user cancel the change? else if (e.Label == null || expression == node.Text) { // Do nothing } // Did the user delete an existing watch? else if (expression == "") { e.CancelEdit = true; DeleteWatch(node); } // The user modified an existing watch else { VariableDetails oldVar = node.Tag as VariableDetails; if (oldVar != null) { WatchDetails oldWatch = mDebugger.FindWatch(oldVar.WatchID); if (oldWatch != null) { mDebugger.RemoveWatch(oldWatch); } } WatchDetails newWatch = mDebugger.AddWatch(expression); VariableDetails newVar = new VariableDetails(newWatch.ID, new LuaValue[] { }, null, null, false, false, false, false, VariableClass.Watch); node.Tag = newVar; node.Key = newVar.ToString(); node.Text = expression; node.SubItems[1].Text = ""; node.SubItems[2].Text = ""; if (mDebugger.ConnectedTarget != null && mDebugger.CurrentStackFrame != null) { mDebugger.ConnectedTarget.RetrieveWatches(mDebugger.CurrentThread, mDebugger.CurrentStackFrame.Depth); } } variablesListView.EndUpdate(); }
internal void NodeChangedVisible(TreeTableNode item) { UpdateItems(); }
internal void NodeChangedExpandable(TreeTableNode node) { InvalidateNode(node); }
internal void RemoveFromHashRecursive(TreeTableNode root) { if (root.Key != "") { System.Diagnostics.Debug.Assert(m_keyhash.ContainsKey(root.Key)); m_keyhash.Remove(root.Key); } foreach (TreeTableNode node in root.Items) { RemoveFromHashRecursive(node); } }