You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.5 KiB
89 lines
2.5 KiB
// <file> |
|
// <copyright see="prj:///doc/copyright.txt"/> |
|
// <license see="prj:///doc/license.txt"/> |
|
// <author name="Daniel Grunwald"/> |
|
// <version>$Revision$</version> |
|
// </file> |
|
|
|
using ICSharpCode.Core; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.IO; |
|
using System.Windows.Forms; |
|
using System.Xml; |
|
using ICSharpCode.SharpDevelop.Project; |
|
|
|
namespace FSharpBinding |
|
{ |
|
public static class ProjectHelpers |
|
{ |
|
public static IEnumerable<FileNode> getFileNodes(TreeNodeCollection nodes) |
|
{ |
|
foreach (TreeNode node in nodes) { |
|
FileNode fileNode = node as FileNode; |
|
if (fileNode != null && fileNode.ProjectItem != null) { |
|
yield return fileNode; |
|
} |
|
} |
|
} |
|
|
|
public static void reorderItems(TreeNodeCollection nodes, IProject project) |
|
{ |
|
//ProjectService.MarkProjectDirty(project) |
|
project.Save(); |
|
XmlDocument doc = new XmlDocument(); |
|
doc.Load(project.FileName); |
|
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); |
|
nsmgr.AddNamespace("proj", "http://schemas.microsoft.com/developer/msbuild/2003"); |
|
var d = new Dictionary<FileNode, XmlNode>(); |
|
foreach (FileNode node in getFileNodes(nodes)) { |
|
var docNode = doc.SelectSingleNode("//proj:Compile[@Include=\"" + Path.GetFileName(node.FileName) + "\"]", nsmgr); |
|
if (docNode != null) { |
|
d[node] = docNode; |
|
docNode.ParentNode.RemoveChild(docNode); |
|
} |
|
} |
|
var itemNode = doc.SelectSingleNode("//proj:ItemGroup", nsmgr); |
|
foreach (FileNode node in getFileNodes(nodes)) { |
|
XmlNode xmlElem; |
|
if (d.TryGetValue(node, out xmlElem)) |
|
itemNode.AppendChild(xmlElem); |
|
} |
|
doc.Save(project.FileName); |
|
} |
|
} |
|
|
|
public class MoveUpFileEvent : AbstractMenuCommand |
|
{ |
|
public override void Run() |
|
{ |
|
FileNode node = ProjectBrowserPad.Instance.SelectedNode as FileNode; |
|
if (node != null) { |
|
TreeNode parent = node.Parent; |
|
int nodeIndex = parent.Nodes.IndexOf(node); |
|
if (nodeIndex > 1) { |
|
parent.Nodes.Remove(node); |
|
parent.Nodes.Insert(nodeIndex - 1, node); |
|
} |
|
ProjectHelpers.reorderItems(parent.Nodes, node.Project); |
|
} |
|
} |
|
} |
|
|
|
public class MoveDownFileEvent : AbstractMenuCommand |
|
{ |
|
public override void Run() |
|
{ |
|
FileNode node = ProjectBrowserPad.Instance.SelectedNode as FileNode; |
|
if (node != null) { |
|
TreeNode parent = node.Parent; |
|
int nodeIndex = parent.Nodes.IndexOf(node); |
|
if (nodeIndex < parent.Nodes.Count) { |
|
parent.Nodes.Remove(node); |
|
parent.Nodes.Insert(nodeIndex + 1, node); |
|
} |
|
ProjectHelpers.reorderItems(parent.Nodes, node.Project); |
|
} |
|
} |
|
} |
|
}
|
|
|