|
3 | 3 | using System.Drawing; |
4 | 4 | using System.Linq; |
5 | 5 | using System.Windows.Forms; |
6 | | -using ASCompletion; |
7 | 6 | using ASCompletion.Context; |
8 | 7 | using ASCompletion.Model; |
9 | 8 | using JetBrains.Annotations; |
@@ -98,67 +97,70 @@ void RefreshTree() |
98 | 97 | { |
99 | 98 | tree.BeginUpdate(); |
100 | 99 | tree.Nodes.Clear(); |
101 | | - FillTree(); |
| 100 | + FillTree(input.Text.Trim()); |
102 | 101 | tree.ExpandAll(); |
103 | 102 | tree.EndUpdate(); |
104 | 103 | } |
105 | 104 |
|
106 | | - void FillTree() |
| 105 | + void FillTree(string search) |
107 | 106 | { |
108 | 107 | var isHaxe = InFile.haXe; |
109 | | - if (InFile.Members.Count > 0) AddMembers(tree.Nodes, InFile, InFile.Members, isHaxe); |
| 108 | + if (InFile.Members.Count > 0) FillNodes(tree.Nodes, InFile, InFile.Members, isHaxe, search); |
110 | 109 | foreach (var classModel in InFile.Classes) |
111 | 110 | { |
112 | | - var node = FormHelper.CreateTreeNode(classModel); |
| 111 | + var node = NodeFactory.CreateTreeNode(classModel); |
113 | 112 | tree.Nodes.Add(node); |
114 | | - AddMembers(node.Nodes, InFile, classModel.Members, isHaxe, classModel.Equals(InClass)); |
| 113 | + FillNodes(node.Nodes, InFile, classModel.Members, isHaxe, classModel.Equals(InClass), search); |
115 | 114 | } |
116 | 115 | if (SelectedNode != null || tree.Nodes.Count == 0) return; |
117 | | - var search = input.Text.Trim(); |
118 | 116 | if (search.Length == 0) |
119 | 117 | { |
120 | | - if (InClass.Equals(ClassModel.VoidClass)) tree.SelectedNode = tree.Nodes[0]; |
| 118 | + if (InClass.Equals(ClassModel.VoidClass)) tree.SelectedNode = tree.TopNode; |
121 | 119 | else tree.SelectedNode = tree.Nodes.OfType<ClassNode>().FirstOrDefault(it => it.Model.Equals(InClass)); |
122 | 120 | } |
123 | 121 | else |
124 | 122 | { |
125 | | - var nodes = tree.Nodes.OfType<TreeNode>().ToList().FindAll(it => |
| 123 | + var nodes = tree.Nodes.OfType<ClassNode>().ToList().FindAll(it => |
126 | 124 | { |
127 | | - var word = ((ClassNode) it).Model.QualifiedName; |
| 125 | + var word = it.Model.QualifiedName; |
128 | 126 | var score = PluginCore.Controls.CompletionList.SmartMatch(word, search, search.Length); |
129 | 127 | return score > 0 && score < 6; |
130 | 128 | }); |
131 | 129 | tree.Nodes.Clear(); |
132 | 130 | if (nodes.Count == 0) return; |
133 | 131 | tree.Nodes.AddRange(nodes.ToArray()); |
134 | | - tree.SelectedNode = tree.Nodes[0]; |
| 132 | + tree.SelectedNode = tree.TopNode; |
135 | 133 | } |
136 | 134 | } |
137 | 135 |
|
138 | | - void AddMembers(TreeNodeCollection nodes, FileModel inFile, MemberList members, bool isHaxe) |
| 136 | + void FillNodes(TreeNodeCollection nodes, FileModel inFile, MemberList members, bool isHaxe, string search) |
139 | 137 | { |
140 | | - AddMembers(nodes, inFile, members, isHaxe, true); |
| 138 | + FillNodes(nodes, inFile, members, isHaxe, true, search); |
141 | 139 | } |
142 | 140 |
|
143 | | - void AddMembers(TreeNodeCollection nodes, FileModel inFile, MemberList members, bool isHaxe, bool currentClass) |
| 141 | + void FillNodes(TreeNodeCollection nodes, FileModel inFile, MemberList members, bool isHaxe, bool currentClass, string search) |
144 | 142 | { |
145 | | - var items = members.Items.ToList(); |
146 | | - if (CurrentFilter != null) |
147 | | - { |
148 | | - var flags = (FlagType) CurrentFilter.Tag; |
149 | | - items.RemoveAll(it => (it.Flags & flags) == 0); |
150 | | - } |
151 | | - var search = input.Text.Trim(); |
152 | | - var searchIsNotEmpty = search.Length > 0; |
153 | | - if (searchIsNotEmpty) items = SearchUtil.FindAll(items, search); |
| 143 | + var items = FilterTypes(members.Items.ToList()); |
| 144 | + items = SearchUtil.FindAll(items, search); |
154 | 145 | foreach (var it in items) |
155 | 146 | { |
156 | | - nodes.Add(FormHelper.CreateTreeNode(inFile, isHaxe, it)); |
| 147 | + nodes.Add(NodeFactory.CreateTreeNode(inFile, isHaxe, it)); |
157 | 148 | } |
158 | | - if ((searchIsNotEmpty && SelectedNode == null || currentClass) && nodes.Count > 0) |
| 149 | + if ((search.Length > 0 && SelectedNode == null || currentClass) && nodes.Count > 0) |
159 | 150 | tree.SelectedNode = nodes[0]; |
160 | 151 | } |
161 | 152 |
|
| 153 | + [NotNull] |
| 154 | + List<MemberModel> FilterTypes(List<MemberModel> list) |
| 155 | + { |
| 156 | + if (CurrentFilter != null) |
| 157 | + { |
| 158 | + var flags = (FlagType) CurrentFilter.Tag; |
| 159 | + list.RemoveAll(it => (it.Flags & flags) == 0); |
| 160 | + } |
| 161 | + return list; |
| 162 | + } |
| 163 | + |
162 | 164 | protected override void Navigate() |
163 | 165 | { |
164 | 166 | if (SelectedNode != null) DialogResult = DialogResult.OK; |
|
0 commit comments