#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
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

// <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);
}
}
}
}