Browse Source

Allow custom find logic for treenodes

pull/14/head
Boris Kozorovitzky 15 years ago committed by Daniel Grunwald
parent
commit
36f3f09689
  1. 38
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
  2. 38
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs
  3. 16
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs
  4. 12
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs

38
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs

@ -292,7 +292,7 @@ namespace ICSharpCode.SharpDevelop.Project
} }
string relativePath = String.Empty; string relativePath = String.Empty;
TreeNode targetNode = FindProjectNode(project); AbstractProjectBrowserTreeNode targetNode = FindProjectNode(project);
if (targetNode == null) { if (targetNode == null) {
@ -304,7 +304,7 @@ namespace ICSharpCode.SharpDevelop.Project
return null; return null;
} else { } else {
targetNode = treeView.Nodes[0]; targetNode = treeView.Nodes[0] as AbstractProjectBrowserTreeNode;
if (fileName.StartsWith(solution.Directory)) { if (fileName.StartsWith(solution.Directory)) {
relativePath = fileName.Replace(solution.Directory, ""); relativePath = fileName.Replace(solution.Directory, "");
} }
@ -337,39 +337,7 @@ namespace ICSharpCode.SharpDevelop.Project
} }
if (!targetNode.IsExpanded) { return targetNode.GetNodeByRelativePath(relativePath);
// the targetNode is not expanded so it's as deep as we can go
//LoggingService.DebugFormatted("target node '{0};{1}' is not expanded.", targetNode, targetNode.Text);
return targetNode;
}
//LoggingService.Debug("entering depth loop...");
//LoggingService.DebugFormatted(@"\- looking for '{0}'", relativePath);
//LoggingService.DebugFormatted(@"\- starting at '{0}'", targetNode != null ? targetNode.Text : "null");
string[] targets = relativePath.Trim('/','\\').Split('/', '\\');
TreeNode nextNode = null;
foreach (string target in targets) {
//LoggingService.Debug("-- looking for: "+target);
nextNode = null;
foreach (TreeNode node in targetNode.Nodes) {
if (node == null) {
// can happen when the node is currently expanding
continue;
}
if (node.Text == target) {
nextNode = node;
break;
}
}
if (nextNode == null) {
// targetNode is as deep as we can find
break;
} else {
targetNode = nextNode;
}
}
return targetNode;
} }
ProjectNode FindProjectNode(IProject project) ProjectNode FindProjectNode(IProject project)

38
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs

@ -160,5 +160,43 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
return StringParser.Parse(question, new string[,] {{"FileName", Text}}); return StringParser.Parse(question, new string[,] {{"FileName", Text}});
} }
public virtual AbstractProjectBrowserTreeNode GetNodeByRelativePath(string relativePath)
{
if (relativePath == Text)
return this;
string[] targets = relativePath.Trim('/', '\\').Split('/', '\\');
if (targets[0] != Text)
return null;
if (!this.IsExpanded)
{
// the targetNode is not expanded so it's as deep as we can go
//LoggingService.DebugFormatted("target node '{0};{1}' is not expanded.", targetNode, targetNode.Text);
return this;
}
string currentPath = relativePath.Trim('/', '\\').RemoveStart(targets[0]).Trim('/', '\\');
//LoggingService.Debug("entering depth loop...");
//LoggingService.DebugFormatted(@"\- looking for '{0}'", relativePath);
//LoggingService.DebugFormatted(@"\- starting at '{0}'", targetNode != null ? targetNode.Text : "null");
//LoggingService.Debug("-- looking for: "+target);
foreach (AbstractProjectBrowserTreeNode node in this.Nodes)
{
if (node == null)
{
// can happen when the node is currently expanding
continue;
}
AbstractProjectBrowserTreeNode tempNode = node.GetNodeByRelativePath(currentPath);
if (tempNode != null)
return tempNode;
}
return null;
}
} }
} }

16
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs

@ -330,5 +330,21 @@ namespace ICSharpCode.SharpDevelop.Project
FileService.RemoveFile(fileNode.FileName, false); FileService.RemoveFile(fileNode.FileName, false);
} }
} }
public override AbstractProjectBrowserTreeNode GetNodeByRelativePath(string relativePath)
{
if (relativePath == Text)
return this;
foreach (AbstractProjectBrowserTreeNode node in Nodes)
{
AbstractProjectBrowserTreeNode returnedNode = node.GetNodeByRelativePath(relativePath);
if (returnedNode != null)
return returnedNode;
}
return this;
}
} }
} }

12
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs

@ -225,5 +225,17 @@ namespace ICSharpCode.SharpDevelop.Project
new Project.Commands.AddNewItemsToProject().Run(); new Project.Commands.AddNewItemsToProject().Run();
return; return;
} }
public override AbstractProjectBrowserTreeNode GetNodeByRelativePath(string relativePath)
{
foreach (AbstractProjectBrowserTreeNode node in Nodes)
{
AbstractProjectBrowserTreeNode returnedNode = node.GetNodeByRelativePath(relativePath);
if (returnedNode != null)
return returnedNode;
}
return this;
}
} }
} }

Loading…
Cancel
Save