Changeset 12438 for branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs
- Timestamp:
- 06/12/15 15:35:16 (9 years ago)
- Location:
- branches/HeuristicLab.DatasetRefactor/sources
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.DatasetRefactor/sources
- Property svn:mergeinfo changed
/trunk/sources merged: 12262,12264,12273,12292-12293,12305,12315,12333,12358-12361,12365,12392-12393,12397-12401,12422,12424,12428-12435
- Property svn:mergeinfo changed
-
branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs merged: 12397-12398,12400
r12031 r12438 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Drawing; 24 25 using System.Linq; 25 26 using System.Reflection; … … 177 178 else { 178 179 searchString = searchString.ToLower(); 180 TreeNode selectedNode = typesTreeView.SelectedNode; 179 181 180 182 if (!searchString.Contains(currentSearchString)) { 181 183 typesTreeView.BeginUpdate(); 182 184 // expand search -> restore all tree nodes 183 TreeNode selectedNode = typesTreeView.SelectedNode;184 185 typesTreeView.Nodes.Clear(); 185 186 foreach (TreeNode node in treeNodes) 186 187 typesTreeView.Nodes.Add((TreeNode)node.Clone()); 187 RestoreSelectedNode(selectedNode);188 188 typesTreeView.EndUpdate(); 189 189 } 190 191 190 192 191 // remove nodes 193 192 typesTreeView.BeginUpdate(); 193 var searchTokens = searchString.Split(' '); 194 194 int i = 0; 195 195 while (i < typesTreeView.Nodes.Count) { 196 int j = 0; 197 while (j < typesTreeView.Nodes[i].Nodes.Count) { 198 if (!typesTreeView.Nodes[i].Nodes[j].Text.ToLower().Contains(searchString)) { 199 if ((typesTreeView.Nodes[i].Nodes[j].Tag as Type).Equals(selectedType)) 200 SelectedType = null; 201 typesTreeView.Nodes[i].Nodes[j].Remove(); 202 } else 203 j++; 204 } 205 if (typesTreeView.Nodes[i].Nodes.Count == 0) 206 typesTreeView.Nodes[i].Remove(); 207 else 208 i++; 196 var node = typesTreeView.Nodes[i]; 197 bool remove = FilterNode(node, searchTokens); 198 if (remove) 199 typesTreeView.Nodes.RemoveAt(i); 200 else i++; 209 201 } 210 202 typesTreeView.EndUpdate(); 211 203 currentSearchString = searchString; 212 204 213 // if there is just one type node left, select by default 214 if (typesTreeView.Nodes.Count == 1) { 215 if (typesTreeView.Nodes[0].Nodes.Count == 1) { 216 typesTreeView.SelectedNode = typesTreeView.Nodes[0].Nodes[0]; 217 } 218 } 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; 219 212 220 213 if (typesTreeView.Nodes.Count == 0) { … … 225 218 typesTreeView.Enabled = true; 226 219 } 220 typesTreeView.EndUpdate(); 221 222 RestoreSelectedNode(selectedNode); 227 223 UpdateDescription(); 228 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."); 229 250 } 230 251 … … 355 376 SetTypeParameter(); 356 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 } 357 450 #endregion 358 451 - Property svn:mergeinfo changed
Note: See TracChangeset
for help on using the changeset viewer.