/// <summary> /// Sets up the tree and adds the first level of nodes. /// </summary> protected void InitializeTree() { BeginUpdate(); Nodes.Clear(); foreach (NodeHierarchy hierarchy in hierarchies) { MultiSourceTreeNode rootNode = new MultiSourceTreeNode(hierarchy.RootNodeText); rootNode.CollapsedImageIndex = hierarchy.RootNodeImageIndex; rootNode.ExpandedImageIndex = hierarchy.RootNodeImageIndex; foreach (NodeSource source in hierarchy.NodeSources) { NodeInfo[] rootInfos = source.CreateRootNodeInfo(); rootNode.AddInfoEntries(rootInfos); source.UpdateNode(rootNode); foreach (NodeInfo info in rootInfos) { AddChildNodes(rootNode, info.BuildChildNodes()); } } Nodes.Add(rootNode); rootNode.Expand(); } SelectedNode = Nodes[0]; EndUpdate(); }
private void HandleDoubleClick() { MultiSourceTreeNode node = (MultiSourceTreeNode)GetNodeAt(lastClickX, lastClickY); if (node == null) { return; } foreach (NodeInfo info in node.InfoEntries) { foreach (NodeStateSubscriber subscriber in info.Subscriptions) { foreach (MenuDefinition def in subscriber.State.MenuDefinitions.Keys) { bool match = false; if (subscriber.State.MenuDefinitions[def]) // Will equal true if this is a default option. { match = true; if (def.MenuItemTest != null) { match = def.MenuItemTest.Invoke(node, info); } } if (match) { def.OnMenuClicked(node, info); return; } } } } if (node.IsExpanded) { node.Collapse(); } else { node.Expand(); } }