~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to samples/ComponentInspector/ComponentInspector.Core/Src/ObjectBrowser/TreeNodes/AssemblyTreeNode.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
// <file>
 
2
//     <copyright see="prj:///doc/copyright.txt"/>
 
3
//     <license see="prj:///doc/license.txt"/>
 
4
//     <owner name="Oakland Software Incorporated" email="general@oaklandsoftware.com"/>
 
5
//     <version>$Revision$</version>
 
6
// </file>
 
7
 
 
8
using System;
 
9
using System.Collections;
 
10
using System.Reflection;
 
11
using System.Windows.Forms;
 
12
 
 
13
using NoGoop.Obj;
 
14
 
 
15
namespace NoGoop.ObjBrowser.TreeNodes
 
16
{
 
17
 
 
18
        internal class AssemblyTreeNode : BrowserTreeNode, 
 
19
        IMenuTreeNode
 
20
        {
 
21
 
 
22
        protected TypeLibrary           _typeLib;
 
23
        protected Assembly              _assembly;
 
24
        protected bool                  _noClose;
 
25
 
 
26
 
 
27
        internal Assembly Assembly
 
28
        {
 
29
            get
 
30
            {
 
31
                return _assembly;
 
32
            }
 
33
        }
 
34
 
 
35
        internal TypeLibrary TypeLib
 
36
        {
 
37
            get
 
38
            {
 
39
                return _typeLib;
 
40
            }
 
41
            set
 
42
            {
 
43
                _typeLib = value;
 
44
            }
 
45
        }
 
46
 
 
47
        internal bool NoClose
 
48
        {
 
49
            get
 
50
            {
 
51
                return _noClose;
 
52
            }
 
53
            set
 
54
            {
 
55
                _noClose = value;
 
56
            }
 
57
        }
 
58
 
 
59
 
 
60
        internal AssemblyTreeNode(Assembly assembly,
 
61
                                  TypeLibrary typeLib) : base()
 
62
                {
 
63
            _assembly = assembly;
 
64
            _typeLib = typeLib;
 
65
 
 
66
            MethodInfo entryPoint = null;
 
67
            try
 
68
            {
 
69
                entryPoint = _assembly.EntryPoint;
 
70
            }
 
71
            catch
 
72
            {
 
73
                // Sadly, this can throw for some reason
 
74
            }
 
75
 
 
76
            if (entryPoint != null)
 
77
                _isDragSource = true;
 
78
            PostConstructor();
 
79
                }
 
80
 
 
81
 
 
82
        // Gets the objects to iterate over to make the child nodes
 
83
        protected override ICollection GetChildren()
 
84
        {
 
85
            return _assembly.GetModules();
 
86
        }
 
87
 
 
88
        // Allocates the correct type of node
 
89
        protected override BrowserTreeNode AllocateChildNode(Object obj)
 
90
        {
 
91
            return new ModuleTreeNode((Module)obj);
 
92
        }
 
93
 
 
94
 
 
95
        // Determines is this node has children
 
96
        protected override bool HasChildren()
 
97
        {
 
98
            return _assembly.GetModules().Length > 0;
 
99
        }
 
100
 
 
101
 
 
102
        internal NamespaceTreeNode FindNamespace(String ns)
 
103
        {
 
104
            ExpandNode();
 
105
            foreach (ModuleTreeNode modNode in LogicalNodes)
 
106
            {
 
107
                modNode.ExpandNode();
 
108
                foreach (NamespaceTreeNode nameNode in modNode.LogicalNodes)
 
109
                {
 
110
                    if (nameNode.Namespace.Equals(ns))
 
111
                    {
 
112
                        return nameNode;
 
113
                    }
 
114
                    
 
115
                }
 
116
            }
 
117
            return null;
 
118
        }
 
119
 
 
120
        internal TypeTreeNode GetTypeNode(Type t)
 
121
        {
 
122
            String ns = t.Namespace;
 
123
            bool isNestedType = (t.MemberType == MemberTypes.NestedType);
 
124
 
 
125
            ExpandNode();
 
126
            foreach (ModuleTreeNode modNode in LogicalNodes)
 
127
            {
 
128
                modNode.ExpandNode();
 
129
                foreach (NamespaceTreeNode nameNode in modNode.LogicalNodes)
 
130
                {
 
131
                    if (nameNode.Namespace.Equals(ns) || 
 
132
                        (ns == null && nameNode.Namespace.Equals("")) )
 
133
                    {
 
134
                        nameNode.ExpandNode();
 
135
                        foreach (TypeTreeNode typeNode in 
 
136
                                 nameNode.LogicalNodes)
 
137
                        {
 
138
                            if (typeNode.Type.Equals(t))
 
139
                            {
 
140
                                return typeNode;
 
141
                            } 
 
142
                            else if (isNestedType)
 
143
                            {
 
144
                                TypeTreeNode nestedNode =
 
145
                                    (TypeTreeNode)typeNode.FindMemberNode
 
146
                                    (t, TypeTreeNode.FIND_NESTED);
 
147
                                if (nestedNode != null)
 
148
                                    return nestedNode;
 
149
                            }
 
150
                        }
 
151
                        break;
 
152
                    }
 
153
                }
 
154
            }
 
155
            return null;
 
156
        }
 
157
 
 
158
        public override bool HasCreateObj()
 
159
        {
 
160
            if (_assembly.EntryPoint != null)
 
161
                return true;
 
162
            return false;
 
163
        }
 
164
 
 
165
 
 
166
        public override bool HasClose()
 
167
        {
 
168
            if (_noClose)
 
169
                return false;
 
170
            return true;
 
171
        }
 
172
 
 
173
        public override void SetupParamPanel()
 
174
        {
 
175
            if (_assembly.EntryPoint != null)
 
176
            {
 
177
                ObjectBrowser.ParamPanel.Setup
 
178
                    (ActionMenuHelper.CalcInvokeActionName(this, false),
 
179
                     new EventHandler
 
180
                         (((BrowserTree)TreeView).TreeNodePopupCreateObj),
 
181
                     this,
 
182
                     _assembly.EntryPoint.GetParameters());
 
183
                return;
 
184
            }
 
185
            base.SetupParamPanel();
 
186
        }
 
187
 
 
188
        public override void RemoveLogicalNode()
 
189
        {
 
190
            AssemblySupport.CloseAssembly(this);
 
191
            ControlTree.RemoveAssy(_assembly);
 
192
            base.RemoveLogicalNode();
 
193
        }
 
194
 
 
195
 
 
196
 
 
197
        public override String GetName()
 
198
                {
 
199
            return _assembly.GetName().Name;
 
200
                }
 
201
 
 
202
        public override void GetDetailText()
 
203
                {
 
204
            base.GetDetailText();
 
205
 
 
206
            if (_typeLib != null)
 
207
                _typeLib.GetDetailText(!TypeLibrary.SHOW_ASSY);
 
208
 
 
209
            AssemblySupport.GetDetailText(_assembly);
 
210
                }
 
211
 
 
212
        }
 
213
 
 
214
}