[RTL]
[reactos.git] / reactos / tools / sysgen / RosBuilder / Controls / ProjectTreeView.cs
1 using System;
2 using System.Windows.Forms;
3 using System.Collections.Generic;
4 using System.Text;
5
6 using SysGen.RBuild.Framework;
7 using SysGen.BuildEngine;
8 using SysGen.BuildEngine.Tasks;
9
10 namespace TriStateTreeViewDemo
11 {
12 public class ProjectTreeView : TreeView
13 {
14 private ISysGenDesigner m_SysGenDesigner = null;
15 private TreeNode m_Project = new TreeNode("Project");
16 private TreeNode m_Platforms = new TreeNode("Platform");
17 private TreeNode m_Languages = new TreeNode("Languages");
18 private TreeNode m_DebugChannels = new TreeNode("Debug Channels");
19 //private TreeNode m_Filters = new TreeNode("Filters");
20 private TreeNode m_Files = new TreeNode("Files");
21 private TreeNode m_Registry = new TreeNode("Registry");
22 //private TreeNode m_Filters = new TreeNode("Filters");
23
24 public ProjectTreeView()
25 {
26 }
27
28 public void SetCatalog(ISysGenDesigner sysGenDesigner)
29 {
30 //Set the software catalog
31 m_SysGenDesigner = sysGenDesigner;
32 m_SysGenDesigner.ProjectController.ProjectLoaded += new EventHandler(PlatformController_ProjectLoaded);
33 m_SysGenDesigner.ProjectController.ProjectUpdated += new EventHandler(PlatformController_ProjectUpdated);
34
35
36 LoadProject();
37 }
38
39 void PlatformController_ProjectLoaded(object sender, EventArgs e)
40 {
41 LoadProject();
42 UpdateProject();
43 }
44
45 void PlatformController_ProjectUpdated(object sender, EventArgs e)
46 {
47 UpdateProject();
48 }
49
50 private void LoadProject()
51 {
52 Nodes.Clear();
53
54 m_Project = new ProjectTreeNode(m_SysGenDesigner.ProjectController.SysGenProject);
55 m_Project.Nodes.Add(m_Platforms);
56 m_Project.Nodes.Add(m_Languages);
57 m_Project.Nodes.Add(m_DebugChannels);
58 // m_Project.Nodes.Add(m_Filters);
59 m_Project.Nodes.Add(m_Files);
60 m_Project.Nodes.Add(m_Registry);
61 m_Project.Expand();
62
63 Nodes.Add(m_Project);
64 }
65
66 private void UpdateProject()
67 {
68 m_Languages.Nodes.Clear();
69 m_DebugChannels.Nodes.Clear();
70
71 foreach (RBuildLanguage language in m_SysGenDesigner.ProjectController.Project.Platform.Languages)
72 {
73 m_Languages.Nodes.Add(language.Name);
74 }
75
76 foreach (RBuildDebugChannel channel in m_SysGenDesigner.ProjectController.Project.Platform.DebugChannels)
77 {
78 m_DebugChannels.Nodes.Add(channel.Name);
79 }
80 }
81
82 public abstract class CatalogTreeNode : TreeNode
83 {
84 public abstract string NodeName { get; }
85 public abstract object NodeObject { get;}
86 }
87
88 public class ProjectTreeNode : CatalogTreeNode
89 {
90 Project m_Platform = null;
91
92 public ProjectTreeNode(Project platform)
93 {
94 m_Platform = platform;
95 Text = platform.FileName;
96 }
97
98 public Project Platform
99 {
100 get { return m_Platform; }
101 }
102
103 public override string NodeName
104 {
105 get { return m_Platform.Name; }
106 }
107
108 public override object NodeObject
109 {
110 get { return Platform; }
111 }
112 }
113
114 public class ModuleTreeNode : CatalogTreeNode
115 {
116 RBuildModule m_Module = null;
117
118 public ModuleTreeNode(RBuildModule module)
119 {
120 m_Module = module;
121 Text = module.Name;
122 }
123
124 public RBuildModule Module
125 {
126 get { return m_Module; }
127 }
128
129 public override string NodeName
130 {
131 get { return Module.Name; }
132 }
133
134 public override object NodeObject
135 {
136 get { return Module; }
137 }
138 }
139
140 public class FolderTreeNode : CatalogTreeNode
141 {
142 private string m_FolderName = null;
143
144 public FolderTreeNode(string name)
145 {
146 m_FolderName = name;
147 Text = name;
148 }
149
150 public override string NodeName
151 {
152 get { return m_FolderName; }
153 }
154
155 public override object NodeObject
156 {
157 get { return NodeName; }
158 }
159 }
160 }
161 }