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