~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/AddIns/BackendBindings/FSharpBinding/ProjectHelpers.cs

  • Committer: sk
  • Date: 2011-09-10 05:17:57 UTC
  • Revision ID: halega@halega.com-20110910051757-qfouz1llya9m6boy
4.1.0.7915 Release Candidate 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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)
 
3
 
 
4
using ICSharpCode.Core;
 
5
using System;
 
6
using System.Collections.Generic;
 
7
using System.IO;
 
8
using System.Windows.Forms;
 
9
using System.Xml;
 
10
using ICSharpCode.SharpDevelop.Project;
 
11
 
 
12
namespace FSharpBinding
 
13
{
 
14
        public static class ProjectHelpers
 
15
        {
 
16
                public static IEnumerable<FileNode> getFileNodes(TreeNodeCollection nodes)
 
17
                {
 
18
                        foreach (TreeNode node in nodes) {
 
19
                                FileNode fileNode = node as FileNode;
 
20
                                if (fileNode != null && fileNode.ProjectItem != null) {
 
21
                                        yield return fileNode;
 
22
                                }
 
23
                        }
 
24
                }
 
25
                
 
26
                public static void reorderItems(TreeNodeCollection nodes, IProject project)
 
27
                {
 
28
                        //ProjectService.MarkProjectDirty(project)
 
29
                        project.Save();
 
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) {
 
38
                                        d[node] = docNode;
 
39
                                        docNode.ParentNode.RemoveChild(docNode);
 
40
                                }
 
41
                        }
 
42
                        var itemNode = doc.SelectSingleNode("//proj:ItemGroup", nsmgr);
 
43
                        foreach (FileNode node in getFileNodes(nodes)) {
 
44
                                XmlNode xmlElem;
 
45
                                if (d.TryGetValue(node, out xmlElem))
 
46
                                        itemNode.AppendChild(xmlElem);
 
47
                        }
 
48
                        doc.Save(project.FileName);
 
49
                }
 
50
        }
 
51
        
 
52
        public class MoveUpFileEvent : AbstractMenuCommand
 
53
        {
 
54
                public override void Run()
 
55
                {
 
56
                        FileNode node = ProjectBrowserPad.Instance.SelectedNode as FileNode;
 
57
                        if (node != null) {
 
58
                                TreeNode parent = node.Parent;
 
59
                                int nodeIndex = parent.Nodes.IndexOf(node);
 
60
                                if (nodeIndex > 1) {
 
61
                                        parent.Nodes.Remove(node);
 
62
                                        parent.Nodes.Insert(nodeIndex - 1, node);
 
63
                                }
 
64
                                ProjectHelpers.reorderItems(parent.Nodes, node.Project);
 
65
                        }
 
66
                }
 
67
        }
 
68
        
 
69
        public class MoveDownFileEvent : AbstractMenuCommand
 
70
        {
 
71
                public override void Run()
 
72
                {
 
73
                        FileNode node = ProjectBrowserPad.Instance.SelectedNode as FileNode;
 
74
                        if (node != null) {
 
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);
 
80
                                }
 
81
                                ProjectHelpers.reorderItems(parent.Nodes, node.Project);
 
82
                        }
 
83
                }
 
84
        }
 
85
}