Browse Source

Fixed SD2-798 - New items are not sorted in the project browser.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3469 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Christian Hornung 17 years ago
parent
commit
05ab24a760
  1. 62
      src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeNode.cs
  2. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs
  3. 8
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs
  4. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs
  5. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs
  6. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/NodeBuilder/DefaultDotNetNodeBuilder.cs
  7. 4
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/NodeBuilder/WebReferenceNodeBuilder.cs
  8. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
  9. 22
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  10. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs
  11. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ReferenceFolder.cs
  12. 14
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs
  13. 6
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionNode.cs

62
src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeNode.cs

@ -74,12 +74,14 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -74,12 +74,14 @@ namespace ICSharpCode.SharpDevelop.Gui
{
internalParent = parentNode;
parentNode.Nodes.Insert(index, this);
Refresh();
}
public void Insert(int index, TreeView view)
{
internalParent = null;
view.Nodes.Insert(index, this);
Refresh();
}
void AddTo(TreeNodeCollection nodes)
@ -502,6 +504,66 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -502,6 +504,66 @@ namespace ICSharpCode.SharpDevelop.Gui
return Text;
}
}
int GetInsertionIndex(TreeNodeCollection nodes, TreeView treeView)
{
if (treeView == null) {
return nodes.Count;
}
Comparison<TreeNode> comparison = null;
ExtTreeView etv = treeView as ExtTreeView;
if (etv == null) {
if (!treeView.Sorted) {
return nodes.Count;
}
if (treeView.TreeViewNodeSorter != null) {
comparison = treeView.TreeViewNodeSorter.Compare;
}
} else {
if (!etv.IsSorted) {
return nodes.Count;
}
if (etv.NodeSorter != null) {
comparison = etv.NodeSorter.Compare;
}
}
if (comparison == null) {
return nodes.Count;
}
for (int i = 0; i < nodes.Count; ++i) {
if (comparison(this, nodes[i]) < 0) {
return i;
}
}
return nodes.Count;
}
/// <summary>
/// Inserts this node into the specified TreeView at the position
/// determined by the comparer of the TreeView, assuming that
/// all other immediate child nodes of the TreeView are in sorted order.
/// </summary>
public void InsertSorted(TreeView treeView)
{
this.Insert(this.GetInsertionIndex(treeView.Nodes, treeView), treeView);
}
/// <summary>
/// Inserts this node into the specified <paramref name="parentNode"/>
/// at the position determined by the comparer
/// of the TreeView which contains the <paramref name="parentNode"/>,
/// assuming that all other immediate child nodes of the <paramref name="parentNode"/>
/// are in sorted order.
/// </summary>
public void InsertSorted(TreeNode parentNode)
{
this.Insert(this.GetInsertionIndex(parentNode.Nodes, parentNode.TreeView), parentNode);
}
#endregion
}
}

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs

@ -318,7 +318,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -318,7 +318,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
pair.Value.DependentUpon = Path.GetFileName(fileNode.FileName);
pair.Key.Remove();
pair.Key.FileNodeStatus = FileNodeStatus.BehindFile;
pair.Key.AddTo(fileNode);
pair.Key.InsertSorted(fileNode);
}
fileNode.Project.Save();

8
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs

@ -102,7 +102,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -102,7 +102,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
FileService.CopyFile(directoryName, copiedFileName, true, false);
DirectoryNode newNode = new DirectoryNode(copiedFileName);
newNode.AddTo(node);
newNode.InsertSorted(node);
if (includeInProject) {
IncludeFileInProject.IncludeDirectoryNode(newNode, false);
}
@ -141,7 +141,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -141,7 +141,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
}
fileNode = new FileNode(copiedFileName);
fileNode.AddTo(node);
fileNode.InsertSorted(node);
return IncludeFileInProject.IncludeFileNode(fileNode);
}
return null;
@ -228,7 +228,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -228,7 +228,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
fileProjectItem.DependentUpon = pair.Value;
addedItems.Add(fileProjectItem);
fileNode.ProjectItem = fileProjectItem;
fileNode.AddTo(node);
fileNode.InsertSorted(node);
ProjectService.AddProjectItem(node.Project, fileProjectItem);
}
node.Project.Save();
@ -342,7 +342,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -342,7 +342,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
FileService.FireFileCreated(directoryName, true);
DirectoryNode directoryNode = new DirectoryNode(directoryName, FileNodeStatus.InProject);
directoryNode.AddTo(upper);
directoryNode.InsertSorted(upper);
IncludeFileInProject.IncludeDirectoryNode(directoryNode, false);
return directoryNode;

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs

@ -61,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -61,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
foreach (ProjectItem newItem in changes.NewItems) {
ProjectService.AddProjectItem(url.Project, newItem);
FileNode fileNode = new FileNode(newItem.FileName, FileNodeStatus.InProject);
fileNode.AddTo(node);
fileNode.InsertSorted(node);
}
ProjectBrowserPad.Instance.ProjectBrowserControl.TreeView.Sort();
url.Project.Save();

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs

@ -138,7 +138,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -138,7 +138,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
solutionFolderNode.Solution.Save();
SolutionFolderNode newSolutionFolderNode = new SolutionFolderNode(solutionFolderNode.Solution, newSolutionFolder);
newSolutionFolderNode.AddTo(node);
newSolutionFolderNode.InsertSorted(node);
ProjectBrowserPad.Instance.StartLabelEdit(newSolutionFolderNode);
}
}

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/NodeBuilder/DefaultDotNetNodeBuilder.cs

@ -23,7 +23,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -23,7 +23,7 @@ namespace ICSharpCode.SharpDevelop.Project
public TreeNode AddProjectNode(TreeNode motherNode, IProject project)
{
ProjectNode projectNode = new ProjectNode(project);
projectNode.AddTo(motherNode);
projectNode.InsertSorted(motherNode);
if (project is MissingProject) {
CustomNode missingNode = new CustomNode();

4
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/NodeBuilder/WebReferenceNodeBuilder.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (webReference.WebReferencesProjectItem != null) {
WebReferencesFolderNode webReferencesFolderNode = new WebReferencesFolderNode(webReference.WebReferencesProjectItem);
webReferencesFolderNode.FileNodeStatus = FileNodeStatus.InProject;
webReferencesFolderNode.AddTo(projectNode);
webReferencesFolderNode.InsertSorted(projectNode);
return webReferencesFolderNode;
}
return null;
@ -32,7 +32,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -32,7 +32,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
WebReferenceNode node = new WebReferenceNode(webReference);
node.FileNodeStatus = FileNodeStatus.InProject;
node.AddTo(webReferencesFolderNode);
node.InsertSorted(webReferencesFolderNode);
return node;
}
}

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

@ -393,7 +393,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -393,7 +393,7 @@ namespace ICSharpCode.SharpDevelop.Project
NodeBuilders.AddProjectNode(solutionNode, (IProject)treeObject);
} else {
SolutionFolderNode folderNode = new SolutionFolderNode(solution, (SolutionFolder)treeObject);
folderNode.AddTo(solutionNode);
folderNode.InsertSorted(solutionNode);
}
}

22
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs

@ -291,7 +291,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -291,7 +291,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (string subDirectory in System.IO.Directory.GetDirectories(Directory)) {
if (Path.GetFileName(subDirectory) != ".svn") {
DirectoryNode newDirectoryNode = DirectoryNodeFactory.CreateDirectoryNode(this, Project, subDirectory);
newDirectoryNode.AddTo(this);
newDirectoryNode.InsertSorted(this);
directoryNodeList[Path.GetFileName(subDirectory)] = newDirectoryNode;
}
}
@ -299,7 +299,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -299,7 +299,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (string file in System.IO.Directory.GetFiles(Directory)) {
FileNode fileNode = new FileNode(file);
fileNodeDictionary[Path.GetFileName(file)] = fileNode;
fileNode.AddTo(this);
fileNode.InsertSorted(this);
}
}
if (Nodes.Count == 0) {
@ -344,14 +344,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -344,14 +344,14 @@ namespace ICSharpCode.SharpDevelop.Project
node.ProjectItem = item;
} else {
node = DirectoryNodeFactory.CreateDirectoryNode(item, FileNodeStatus.Missing);
node.AddTo(this);
node.InsertSorted(this);
directoryNodeList[fileName] = node;
}
} else {
FileNode node;
if (fileItem.IsLink) {
node = new FileNode(fileItem.FileName, FileNodeStatus.InProject);
node.AddTo(this);
node.InsertSorted(this);
fileNodeDictionary[fileName] = node;
} else {
if (fileNodeDictionary.TryGetValue(fileName, out node)) {
@ -360,7 +360,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -360,7 +360,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
} else {
node = new FileNode(fileItem.FileName, FileNodeStatus.Missing);
node.AddTo(this);
node.InsertSorted(this);
fileNodeDictionary[fileName] = node;
}
}
@ -383,9 +383,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -383,9 +383,9 @@ namespace ICSharpCode.SharpDevelop.Project
if (NodeIsParent(parentNode, pair.Key)) {
// is pair.Key a parent of parentNode?
// if yes, we have a parent cycle - break it by adding one node to the directory
pair.Key.AddTo(this);
pair.Key.InsertSorted(this);
} else {
pair.Key.AddTo(parentNode);
pair.Key.InsertSorted(parentNode);
if (pair.Key.FileNodeStatus != FileNodeStatus.Missing) {
pair.Key.FileNodeStatus = FileNodeStatus.BehindFile;
}
@ -418,7 +418,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -418,7 +418,7 @@ namespace ICSharpCode.SharpDevelop.Project
this.Expanding();
FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject);
fileNode.AddTo(this);
fileNode.InsertSorted(this);
fileNode.EnsureVisible();
return IncludeFileInProject.IncludeFileNode(fileNode);
}
@ -441,7 +441,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -441,7 +441,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
} else {
node = new DirectoryNode(Path.Combine(Directory, subFolderName), FileNodeStatus.Missing);
node.AddTo(this);
node.InsertSorted(this);
directoryNodeList[subFolderName] = node;
}
}
@ -713,7 +713,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -713,7 +713,7 @@ namespace ICSharpCode.SharpDevelop.Project
fileProjectItem.Include = relFileName;
fileProjectItem.SetEvaluatedMetadata("Link", Path.Combine(RelativePath, Path.GetFileName(node.FileName)));
fileNode.ProjectItem = fileProjectItem;
fileNode.AddTo(this);
fileNode.InsertSorted(this);
ProjectService.AddProjectItem(Project, fileProjectItem);
if (performMove) {
ProjectService.RemoveProjectItem(node.Project, node.ProjectItem);
@ -821,7 +821,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -821,7 +821,7 @@ namespace ICSharpCode.SharpDevelop.Project
} else {
fileNode.FileNodeStatus = FileNodeStatus.InProject;
}
fileNode.AddTo(this);
fileNode.InsertSorted(this);
}
} else if (dataObject.GetDataPresent(typeof(DirectoryNode))) {
DirectoryNode directoryNode = (DirectoryNode)dataObject.GetData(typeof(DirectoryNode));

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

@ -234,7 +234,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -234,7 +234,7 @@ namespace ICSharpCode.SharpDevelop.Project
other.Remove();
((FileProjectItem)other.ProjectItem).DependentUpon = Path.GetFileName(this.FileName);
other.FileNodeStatus = FileNodeStatus.BehindFile;
other.AddTo(this);
other.InsertSorted(this);
LoggingService.Debug("-> Created new dependency, saving solution");
ProjectService.SaveSolution();
} else {

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ReferenceFolder.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (ProjectItem item in project.Items) {
if (item is ReferenceProjectItem) {
ReferenceNode referenceNode = new ReferenceNode((ReferenceProjectItem)item);
referenceNode.AddTo(this);
referenceNode.InsertSorted(this);
}
}
UpdateIcon();

14
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs

@ -88,7 +88,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -88,7 +88,7 @@ namespace ICSharpCode.SharpDevelop.Project
string relativeFileName = FileUtility.GetRelativePath(solution.Directory, fileName);
SolutionItem newItem = new SolutionItem(relativeFileName, relativeFileName);
folder.SolutionItems.Items.Add(newItem);
new SolutionItemNode(solution, newItem).AddTo(this);
new SolutionItemNode(solution, newItem).InsertSorted(this);
}
protected override void Initialize()
@ -100,7 +100,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -100,7 +100,7 @@ namespace ICSharpCode.SharpDevelop.Project
NodeBuilders.AddProjectNode(this, (IProject)treeObject);
} else if (treeObject is SolutionFolder) {
SolutionFolderNode folderNode = new SolutionFolderNode(solution, (SolutionFolder)treeObject);
folderNode.AddTo(this);
folderNode.InsertSorted(this);
} else {
MessageService.ShowWarning("SolutionFolderNode.Initialize(): unknown tree object : " + treeObject);
}
@ -108,7 +108,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -108,7 +108,7 @@ namespace ICSharpCode.SharpDevelop.Project
// add solution items (=files) from project sections.
foreach (SolutionItem item in folder.SolutionItems.Items) {
new SolutionItemNode(Solution, item).AddTo(this);
new SolutionItemNode(Solution, item).InsertSorted(this);
}
base.Initialize();
}
@ -193,7 +193,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -193,7 +193,7 @@ namespace ICSharpCode.SharpDevelop.Project
ExtTreeNode oldParent = node.Parent as ExtTreeNode;
node.Remove();
node.AddTo(folderTreeNode);
node.InsertSorted(folderTreeNode);
if (oldParent != null) {
oldParent.Refresh();
}
@ -264,7 +264,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -264,7 +264,7 @@ namespace ICSharpCode.SharpDevelop.Project
AbstractProjectBrowserTreeNode parentNode = folderNode.Parent as AbstractProjectBrowserTreeNode;
folderNode.Remove();
folderNode.AddTo(this);
folderNode.InsertSorted(this);
folderNode.EnsureVisible();
this.folder.AddFolder(folderNode.Folder);
if (parentNode != null) {
@ -280,7 +280,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -280,7 +280,7 @@ namespace ICSharpCode.SharpDevelop.Project
Container.SolutionItems.Items.Add(solutionItemNode.SolutionItem);
solutionItemNode.Remove();
solutionItemNode.AddTo(this);
solutionItemNode.InsertSorted(this);
solutionItemNode.EnsureVisible();
if (solutionItemNode.Parent != null) {
((ExtTreeNode)solutionItemNode.Parent).Refresh();
@ -291,7 +291,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -291,7 +291,7 @@ namespace ICSharpCode.SharpDevelop.Project
ProjectNode projectNode = (ProjectNode)dataObject.GetData(typeof(ProjectNode));
projectNode.Remove();
projectNode.AddTo(this);
projectNode.InsertSorted(this);
projectNode.EnsureVisible();
this.folder.AddFolder(projectNode.Project);

6
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionNode.cs

@ -95,7 +95,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -95,7 +95,7 @@ namespace ICSharpCode.SharpDevelop.Project
solution.Save();
node = new SolutionFolderNode(solution, newSolutionFolder);
node.AddTo(this);
node.InsertSorted(this);
}
node.AddItem(fileName);
}
@ -131,7 +131,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -131,7 +131,7 @@ namespace ICSharpCode.SharpDevelop.Project
parentNode = folderNode.Parent as AbstractProjectBrowserTreeNode;
folderNode.Remove();
folderNode.AddTo(this);
folderNode.InsertSorted(this);
this.solution.AddFolder(folderNode.Folder);
}
@ -140,7 +140,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -140,7 +140,7 @@ namespace ICSharpCode.SharpDevelop.Project
parentNode = projectNode.Parent as AbstractProjectBrowserTreeNode;
projectNode.Remove();
projectNode.AddTo(this);
projectNode.InsertSorted(this);
projectNode.EnsureVisible();
this.solution.AddFolder(projectNode.Project);
}

Loading…
Cancel
Save