1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
4
using ICSharpCode.Core;
6
using System.Collections.Generic;
8
using System.Windows.Forms;
10
using ICSharpCode.SharpDevelop.Project;
12
namespace FSharpBinding
14
public static class ProjectHelpers
16
public static IEnumerable<FileNode> getFileNodes(TreeNodeCollection nodes)
18
foreach (TreeNode node in nodes) {
19
FileNode fileNode = node as FileNode;
20
if (fileNode != null && fileNode.ProjectItem != null) {
21
yield return fileNode;
26
public static void reorderItems(TreeNodeCollection nodes, IProject project)
28
//ProjectService.MarkProjectDirty(project)
30
XmlDocument doc = new XmlDocument();
31
doc.Load(project.FileName);
32
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
33
nsmgr.AddNamespace("proj", "http://schemas.microsoft.com/developer/msbuild/2003");
34
var d = new Dictionary<FileNode, XmlNode>();
35
foreach (FileNode node in getFileNodes(nodes)) {
36
var docNode = doc.SelectSingleNode("//proj:Compile[@Include=\"" + Path.GetFileName(node.FileName) + "\"]", nsmgr);
37
if (docNode != null) {
39
docNode.ParentNode.RemoveChild(docNode);
42
var itemNode = doc.SelectSingleNode("//proj:ItemGroup", nsmgr);
43
foreach (FileNode node in getFileNodes(nodes)) {
45
if (d.TryGetValue(node, out xmlElem))
46
itemNode.AppendChild(xmlElem);
48
doc.Save(project.FileName);
52
public class MoveUpFileEvent : AbstractMenuCommand
54
public override void Run()
56
FileNode node = ProjectBrowserPad.Instance.SelectedNode as FileNode;
58
TreeNode parent = node.Parent;
59
int nodeIndex = parent.Nodes.IndexOf(node);
61
parent.Nodes.Remove(node);
62
parent.Nodes.Insert(nodeIndex - 1, node);
64
ProjectHelpers.reorderItems(parent.Nodes, node.Project);
69
public class MoveDownFileEvent : AbstractMenuCommand
71
public override void Run()
73
FileNode node = ProjectBrowserPad.Instance.SelectedNode as FileNode;
75
TreeNode parent = node.Parent;
76
int nodeIndex = parent.Nodes.IndexOf(node);
77
if (nodeIndex < parent.Nodes.Count) {
78
parent.Nodes.Remove(node);
79
parent.Nodes.Insert(nodeIndex + 1, node);
81
ProjectHelpers.reorderItems(parent.Nodes, node.Project);