- Timestamp:
- 09/25/15 14:39:59 (9 years ago)
- Location:
- branches/gteufl
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/gteufl
- Property svn:ignore
-
old new 8 8 FxCopResults.txt 9 9 Google.ProtocolBuffers-0.9.1.dll 10 Google.ProtocolBuffers-2.4.1.473.dll 10 11 HeuristicLab 3.3.5.1.ReSharper.user 11 12 HeuristicLab 3.3.6.0.ReSharper.user 12 13 HeuristicLab.4.5.resharper.user 13 14 HeuristicLab.ExtLibs.6.0.ReSharper.user 15 HeuristicLab.Scripting.Development 14 16 HeuristicLab.resharper.user 15 17 ProtoGen.exe … … 17 19 _ReSharper.HeuristicLab 18 20 _ReSharper.HeuristicLab 3.3 21 _ReSharper.HeuristicLab 3.3 Tests 19 22 _ReSharper.HeuristicLab.ExtLibs 20 23 bin 21 24 protoc.exe 22 _ReSharper.HeuristicLab 3.3 Tests 23 Google.ProtocolBuffers-2.4.1.473.dll 25 obj
-
- Property svn:mergeinfo changed
-
Property
svn:global-ignores
set to
*.nuget
packages
- Property svn:ignore
-
branches/gteufl/HeuristicLab.Core.Views/3.3/TypeSelector.cs
- Property svn:mergeinfo changed
r9456 r12969 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 3Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Drawing; 24 25 using System.Linq; 25 26 using System.Reflection; … … 112 113 typesTreeView.Nodes.Clear(); 113 114 treeNodes.Clear(); 115 114 116 imageList.Images.Clear(); 115 117 imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Class); // default icon … … 117 119 imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Interface); // interfaces 118 120 imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Template); // generic types 121 // additional dictionary for image indexes as imageList.ContainsKey and imageList.IndexOfKey are very slow! 122 var imageNames = new Dictionary<string, int>(); 119 123 120 124 var plugins = from p in ApplicationManager.Manager.Plugins … … 141 145 if (type.IsInterface) typeNode.ImageIndex = 2; 142 146 else if (type.ContainsGenericParameters) typeNode.ImageIndex = 3; 143 else if (image List.Images.ContainsKey(type.FullName)) typeNode.ImageIndex = imageList.Images.IndexOfKey(type.FullName);147 else if (imageNames.ContainsKey(type.FullName)) typeNode.ImageIndex = imageNames[type.FullName]; 144 148 else { 145 149 var image = ItemAttribute.GetImage(type); 146 150 if (image != null) { 147 imageList.Images.Add(type.FullName, image); 148 typeNode.ImageIndex = imageList.Images.IndexOfKey(type.FullName); 151 imageList.Images.Add(image); 152 typeNode.ImageIndex = imageList.Images.Count - 1; 153 imageNames.Add(type.FullName, imageList.Images.Count - 1); 149 154 } 150 155 } … … 173 178 else { 174 179 searchString = searchString.ToLower(); 180 TreeNode selectedNode = typesTreeView.SelectedNode; 175 181 176 182 if (!searchString.Contains(currentSearchString)) { 177 183 typesTreeView.BeginUpdate(); 178 184 // expand search -> restore all tree nodes 179 TreeNode selectedNode = typesTreeView.SelectedNode;180 185 typesTreeView.Nodes.Clear(); 181 186 foreach (TreeNode node in treeNodes) 182 187 typesTreeView.Nodes.Add((TreeNode)node.Clone()); 183 RestoreSelectedNode(selectedNode);184 188 typesTreeView.EndUpdate(); 185 189 } 186 187 190 188 191 // remove nodes 189 192 typesTreeView.BeginUpdate(); 193 var searchTokens = searchString.Split(' '); 190 194 int i = 0; 191 195 while (i < typesTreeView.Nodes.Count) { 192 int j = 0; 193 while (j < typesTreeView.Nodes[i].Nodes.Count) { 194 if (!typesTreeView.Nodes[i].Nodes[j].Text.ToLower().Contains(searchString)) { 195 if ((typesTreeView.Nodes[i].Nodes[j].Tag as Type).Equals(selectedType)) 196 SelectedType = null; 197 typesTreeView.Nodes[i].Nodes[j].Remove(); 198 } else 199 j++; 200 } 201 if (typesTreeView.Nodes[i].Nodes.Count == 0) 202 typesTreeView.Nodes[i].Remove(); 203 else 204 i++; 196 var node = typesTreeView.Nodes[i]; 197 bool remove = FilterNode(node, searchTokens); 198 if (remove) 199 typesTreeView.Nodes.RemoveAt(i); 200 else i++; 205 201 } 206 202 typesTreeView.EndUpdate(); 207 203 currentSearchString = searchString; 208 204 209 // if there is just one type node left, select by default 210 if (typesTreeView.Nodes.Count == 1) { 211 if (typesTreeView.Nodes[0].Nodes.Count == 1) { 212 typesTreeView.SelectedNode = typesTreeView.Nodes[0].Nodes[0]; 213 } 214 } 205 // select first item 206 typesTreeView.BeginUpdate(); 207 var firstNode = typesTreeView.Nodes.Count > 0 ? typesTreeView.Nodes[0] : null; 208 while (firstNode != null && !(firstNode.Tag is Type)) 209 firstNode = firstNode.NextVisibleNode; 210 if (firstNode != null) 211 typesTreeView.SelectedNode = firstNode; 215 212 216 213 if (typesTreeView.Nodes.Count == 0) { … … 221 218 typesTreeView.Enabled = true; 222 219 } 220 typesTreeView.EndUpdate(); 221 222 RestoreSelectedNode(selectedNode); 223 223 UpdateDescription(); 224 224 } 225 } 226 227 private bool FilterNode(TreeNode node, string[] searchTokens) { 228 if (node.Tag is IPluginDescription) { // Plugin node 229 int i = 0; 230 while (i < node.Nodes.Count) { 231 bool remove = FilterNode(node.Nodes[i], searchTokens); 232 if (remove) 233 node.Nodes.RemoveAt(i); 234 else i++; 235 } 236 return node.Nodes.Count == 0; 237 } if (node.Tag is Type) { // Type node 238 var text = node.Text; 239 if (searchTokens.Any(searchToken => !text.ToLower().Contains(searchToken))) { 240 var typeTag = (Type)node.Tag; 241 if (typeTag == SelectedType) { 242 SelectedType = null; 243 typesTreeView.SelectedNode = null; 244 } 245 return true; 246 } 247 return false; 248 } 249 throw new InvalidOperationException("Encountered neither a plugin nor a type node during tree traversal."); 225 250 } 226 251 … … 351 376 SetTypeParameter(); 352 377 } 378 private void searchTextBox_KeyDown(object sender, KeyEventArgs e) { 379 if (typesTreeView.Nodes.Count == 0) 380 return; 381 382 if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down) { 383 var selectedNode = typesTreeView.SelectedNode; 384 385 if (selectedNode == null) { // nothing selected => select first 386 if (e.KeyCode == Keys.Down) typesTreeView.SelectedNode = typesTreeView.Nodes.Count > 0 ? typesTreeView.Nodes[0] : null; 387 } else { 388 if (e.KeyCode == Keys.Down && selectedNode.NextVisibleNode != null) 389 typesTreeView.SelectedNode = selectedNode.NextVisibleNode; 390 if (e.KeyCode == Keys.Up && selectedNode.PrevVisibleNode != null) 391 typesTreeView.SelectedNode = selectedNode.PrevVisibleNode; 392 } 393 e.Handled = true; 394 } 395 } 396 private void clearSearchButton_Click(object sender, EventArgs e) { 397 searchTextBox.Text = string.Empty; 398 searchTextBox.Focus(); 399 } 400 401 private TreeNode toolStripMenuNode = null; 402 private void typesTreeView_MouseDown(object sender, MouseEventArgs e) { 403 if (e.Button == MouseButtons.Right) { 404 Point coordinates = typesTreeView.PointToClient(Cursor.Position); 405 toolStripMenuNode = typesTreeView.GetNodeAt(coordinates); 406 407 if (toolStripMenuNode != null && coordinates.X >= toolStripMenuNode.Bounds.Left && 408 coordinates.X <= toolStripMenuNode.Bounds.Right) { 409 typesTreeView.SelectedNode = toolStripMenuNode; 410 411 expandToolStripMenuItem.Enabled = 412 expandToolStripMenuItem.Visible = !toolStripMenuNode.IsExpanded && toolStripMenuNode.Nodes.Count > 0; 413 collapseToolStripMenuItem.Enabled = collapseToolStripMenuItem.Visible = toolStripMenuNode.IsExpanded; 414 } else { 415 expandToolStripMenuItem.Enabled = expandToolStripMenuItem.Visible = false; 416 collapseToolStripMenuItem.Enabled = collapseToolStripMenuItem.Visible = false; 417 } 418 expandAllToolStripMenuItem.Enabled = 419 expandAllToolStripMenuItem.Visible = 420 !typesTreeView.Nodes.OfType<TreeNode>().All(x => TreeNodeIsFullyExpanded(x)); 421 collapseAllToolStripMenuItem.Enabled = 422 collapseAllToolStripMenuItem.Visible = typesTreeView.Nodes.OfType<TreeNode>().Any(x => x.IsExpanded); 423 if (contextMenuStrip.Items.Cast<ToolStripMenuItem>().Any(item => item.Enabled)) 424 contextMenuStrip.Show(Cursor.Position); 425 } 426 } 427 private bool TreeNodeIsFullyExpanded(TreeNode node) { 428 return (node.Nodes.Count == 0) || (node.IsExpanded && node.Nodes.OfType<TreeNode>().All(x => TreeNodeIsFullyExpanded(x))); 429 } 430 private void expandToolStripMenuItem_Click(object sender, EventArgs e) { 431 typesTreeView.BeginUpdate(); 432 if (toolStripMenuNode != null) toolStripMenuNode.ExpandAll(); 433 typesTreeView.EndUpdate(); 434 } 435 private void expandAllToolStripMenuItem_Click(object sender, EventArgs e) { 436 typesTreeView.BeginUpdate(); 437 typesTreeView.ExpandAll(); 438 typesTreeView.EndUpdate(); 439 } 440 private void collapseToolStripMenuItem_Click(object sender, EventArgs e) { 441 typesTreeView.BeginUpdate(); 442 if (toolStripMenuNode != null) toolStripMenuNode.Collapse(); 443 typesTreeView.EndUpdate(); 444 } 445 private void collapseAllToolStripMenuItem_Click(object sender, EventArgs e) { 446 typesTreeView.BeginUpdate(); 447 typesTreeView.CollapseAll(); 448 typesTreeView.EndUpdate(); 449 } 353 450 #endregion 354 451
Note: See TracChangeset
for help on using the changeset viewer.