コード例 #1
0
ファイル: GetTypeDialog.cs プロジェクト: epdumitru/mysqlib
        private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TypePicker.TypeNode node = e.Node as TypePicker.TypeNode;

            _resultType = node != null && node.IsSelectable? node.Type: null;

            okButton.Enabled = _resultType != null;
        }
コード例 #2
0
        private void LoadTypes()
        {
            Cursor = Cursors.WaitCursor;

            try
            {
                _treeView.Nodes.Clear();

                var assemblyNodes  = new Dictionary <Assembly, TreeNode>();
                var namespaceNodes = new Dictionary <string, TreeNode>();
                var typeNodes      = new Dictionary <Type, TypePicker.TypeNode>();
                var service        = (ITypeDiscoveryService)_serviceProvider.GetService(typeof(ITypeDiscoveryService));
                var cTypes         = service.GetTypes(_baseType, _systemCheckBox.Checked);
                var types          = new List <Type>(cTypes.Count);

                foreach (Type type in cTypes)
                {
                    types.Add(type);
                }

                types.Sort((a, b) =>
                           a.Assembly == b.Assembly ?
                           string.Compare(a.FullName, b.FullName) :
                           string.Compare(a.Assembly.FullName, b.Assembly.FullName));

                foreach (var type in types)
                {
                    if (_filter != null && _filter(type) == false)
                    {
                        continue;
                    }

                    var assembly = type.Assembly;

                    TreeNode assemblyNode;

                    if (!assemblyNodes.TryGetValue(assembly, out assemblyNode))
                    {
                        assemblyNodes[assembly] = assemblyNode =
                            _treeView.Nodes.Add(assembly.FullName, assembly.GetName().Name, 1, 1);
                    }

                    var @namespace   = type.Namespace ?? string.Empty;
                    var namespaceKey = assembly.FullName + ", " + @namespace;

                    TreeNode namespaceNode;

                    if (!namespaceNodes.TryGetValue(namespaceKey, out namespaceNode))
                    {
                        namespaceNodes[namespaceKey] = namespaceNode =
                            assemblyNode.Nodes.Add(namespaceKey, @namespace, 2, 2);
                    }

                    GetTypeNode getTypeNode = null; getTypeNode = t =>
                    {
                        TypePicker.TypeNode node;

                        if (typeNodes.TryGetValue(t, out node))
                        {
                            return(node);
                        }

                        if (t.DeclaringType == null)
                        {
                            namespaceNode.Nodes.Add(node = new TypePicker.TypeNode(t.Name, t, false));
                        }
                        else
                        {
                            TreeNode parent = getTypeNode(t.DeclaringType);

                            parent.Nodes.Add(node = new TypePicker.TypeNode(t.Name, t, false));
                        }

                        typeNodes.Add(t, node);

                        return(node);
                    };

                    getTypeNode(type).IsSelectable = true;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
コード例 #3
0
ファイル: GetTypeDialog.cs プロジェクト: epdumitru/mysqlib
        private void LoadTypes()
        {
            Cursor = Cursors.WaitCursor;

            try
            {
                treeView.Nodes.Clear();

                Hashtable assemblyNodes  = new Hashtable();
                Hashtable namespaceNodes = new Hashtable();
                Hashtable typeNodes      = new Hashtable();

                ITypeDiscoveryService service =
                    (ITypeDiscoveryService)_serviceProvider.GetService(typeof(ITypeDiscoveryService));

                ICollection cTypes = service.GetTypes(_baseType, systemCheckBox.Checked);
                List <Type> types  = new List <Type>(cTypes.Count);

                foreach (Type type in cTypes)
                {
                    types.Add(type);
                }

                types.Sort(delegate(Type a, Type b)
                {
                    return(a.Assembly == b.Assembly?
                           a.FullName.CompareTo(b.FullName):
                           a.Assembly.FullName.CompareTo(b.Assembly.FullName));
                });

                foreach (Type type in types)
                {
                    if (_filter != null && _filter(type) == false)
                    {
                        continue;
                    }

                    Assembly assembly     = type.Assembly;
                    TreeNode assemblyNode = (TreeNode)assemblyNodes[assembly];

                    if (assemblyNode == null)
                    {
                        assemblyNodes[assembly] = assemblyNode =
                            treeView.Nodes.Add(assembly.FullName, assembly.GetName().Name, 1, 1);
                    }

                    string   @namespace    = type.Namespace ?? string.Empty;
                    string   namespaceKey  = assembly.FullName + ", " + @namespace;
                    TreeNode namespaceNode = (TreeNode)namespaceNodes[namespaceKey];

                    if (namespaceNode == null)
                    {
                        namespaceNodes[namespaceKey] = namespaceNode =
                            assemblyNode.Nodes.Add(namespaceKey, @namespace, 2, 2);
                    }

                    GetTypeNode getTypeNode = null; getTypeNode = delegate(Type t)
                    {
                        TypePicker.TypeNode node = (TypePicker.TypeNode)typeNodes[t];

                        if (node != null)
                        {
                            return(node);
                        }

                        if (t.DeclaringType == null)
                        {
                            namespaceNode.Nodes.Add(node = new TypePicker.TypeNode(t.Name, t, false));
                        }
                        else
                        {
                            TreeNode parent = getTypeNode(t.DeclaringType);

                            parent.Nodes.Add(node = new TypePicker.TypeNode(t.Name, t, false));
                        }

                        typeNodes[t] = node;

                        return(node);
                    };

                    getTypeNode(type).IsSelectable = true;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }