From 6064f57447f3a763e6573f1d49c2da2444f3294e Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 19 Nov 2010 20:39:44 +0100 Subject: [PATCH] NRefactory.Demo: Expand TreeView at caret offset when parsing. --- ICSharpCode.NRefactory.Demo/.gitignore | 3 ++ .../MainForm.Designer.cs | 1 + ICSharpCode.NRefactory.Demo/MainForm.cs | 29 +++++++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 ICSharpCode.NRefactory.Demo/.gitignore diff --git a/ICSharpCode.NRefactory.Demo/.gitignore b/ICSharpCode.NRefactory.Demo/.gitignore new file mode 100644 index 0000000000..9ce745d95d --- /dev/null +++ b/ICSharpCode.NRefactory.Demo/.gitignore @@ -0,0 +1,3 @@ + +bin/ +obj/ \ No newline at end of file diff --git a/ICSharpCode.NRefactory.Demo/MainForm.Designer.cs b/ICSharpCode.NRefactory.Demo/MainForm.Designer.cs index d1c5b9750d..ae19465d23 100644 --- a/ICSharpCode.NRefactory.Demo/MainForm.Designer.cs +++ b/ICSharpCode.NRefactory.Demo/MainForm.Designer.cs @@ -110,6 +110,7 @@ namespace ICSharpCode.NRefactory.Demo this.csharpTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.csharpTreeView.HideSelection = false; this.csharpTreeView.Location = new System.Drawing.Point(3, 28); this.csharpTreeView.Name = "csharpTreeView"; this.csharpTreeView.Size = new System.Drawing.Size(493, 216); diff --git a/ICSharpCode.NRefactory.Demo/MainForm.cs b/ICSharpCode.NRefactory.Demo/MainForm.cs index 363855d300..c52052440d 100644 --- a/ICSharpCode.NRefactory.Demo/MainForm.cs +++ b/ICSharpCode.NRefactory.Demo/MainForm.cs @@ -35,6 +35,7 @@ namespace ICSharpCode.NRefactory.Demo foreach (var element in cu.Children) { csharpTreeView.Nodes.Add(MakeTreeNode(element)); } + SelectCurrentNode(csharpTreeView.Nodes); } TreeNode MakeTreeNode(INode node) @@ -88,17 +89,41 @@ namespace ICSharpCode.NRefactory.Demo return role.ToString(); } + bool SelectCurrentNode(TreeNodeCollection c) + { + int selectionStart = csharpCodeTextBox.SelectionStart; + int selectionEnd = selectionStart + csharpCodeTextBox.SelectionLength; + foreach (TreeNode t in c) { + INode node = t.Tag as INode; + if (node != null + && selectionStart >= GetOffset(csharpCodeTextBox, node.StartLocation) + && selectionEnd <= GetOffset(csharpCodeTextBox, node.EndLocation)) + { + t.Expand(); + if (!SelectCurrentNode(t.Nodes)) + csharpTreeView.SelectedNode = t; + return true; + } + } + return false; + } + void CSharpGenerateCodeButtonClick(object sender, EventArgs e) { throw new NotImplementedException(); } + int GetOffset(TextBox textBox, DomLocation location) + { + return textBox.GetFirstCharIndexFromLine(location.Line - 1) + location.Column - 1; + } + void CSharpTreeViewAfterSelect(object sender, TreeViewEventArgs e) { INode node = e.Node.Tag as INode; if (node != null) { - int startOffset = csharpCodeTextBox.GetFirstCharIndexFromLine(node.StartLocation.Line - 1) + node.StartLocation.Column - 1; - int endOffset = csharpCodeTextBox.GetFirstCharIndexFromLine(node.EndLocation.Line - 1) + node.EndLocation.Column - 1; + int startOffset = GetOffset(csharpCodeTextBox, node.StartLocation); + int endOffset = GetOffset(csharpCodeTextBox, node.EndLocation); csharpCodeTextBox.Select(startOffset, endOffset - startOffset); } }