// Invoke from child class to reload nodes for the current Tree. Clears Nodes, invokes // input async function that should populate Nodes, then fills the tree view with its contents, // making sure to disable/enable the control. protected async Task ReloadNodesAsync(Func <CancellationToken, Task <Nodes> > loadNodesTask) { var token = _reloadCancellationTokenSequence.Next(); var treeView = TreeViewNode.TreeView; if (treeView == null || !IsAttached) { return; } var newNodes = await loadNodesTask(token); await treeView.SwitchToMainThreadAsync(token); Nodes.Clear(); Nodes.AddNodes(newNodes); try { treeView.BeginUpdate(); IgnoreSelectionChangedEvent = true; FillTreeViewNode(_firstReloadNodesSinceModuleChanged); } finally { IgnoreSelectionChangedEvent = false; treeView.EndUpdate(); ExpandPathToSelectedNode(); _firstReloadNodesSinceModuleChanged = false; } }
private bool AddNode(Dictionary <string, string> dParams) { //can return (firstrun, single, multi) if (!dParams.ContainsKey("address")) { this._data_for_remote = "{\"error\":\"Missing address\"}"; return(false); } string ipaddress = dParams["address"]; Nodes.AddNodes(ipaddress); Nodes.SaveToDisk(); this._data_for_remote = "{\"result\":\"ok\",\"data\":\"" + ipaddress + "\"}"; return(true); }
private void AddNodesToTree( ref Nodes nodes, List <SubmoduleNode> submoduleNodes, GitModule threadModule, SubmoduleInfo topProject) { if (!UseFolderTree) { nodes.AddNodes(submoduleNodes); return; } // Create tree of SubmoduleFolderNode for each path directory and add input SubmoduleNodes as leaves. // Example of (SuperPath + LocalPath).ToPosixPath() for all nodes: // // C:/code/gitextensions2/Externals/conemu-inside // C:/code/gitextensions2/Externals/Git.hub // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/Externals/conemu-inside // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/Externals/Git.hub // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/Externals/ICSharpCode.TextEditor // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/Externals/NBug // C:/code/gitextensions2/Externals/ICSharpCode.TextEditor/gitextensions/GitExtensionsDoc // C:/code/gitextensions2/Externals/NBug // C:/code/gitextensions2/GitExtensionsDoc // // What we want to do is first remove the topModule portion, "C:/code/gitextensions2/", and // then build our tree by breaking up each path into parts, separated by '/'. // // Note that when we break up the paths, some parts are just directories, the others are submodule nodes: // // Externals / ICSharpCode.TextEditor / gitextensions / Externals / Git.hub // folder submodule submodule folder submodule // // Input 'nodes' is an array of SubmoduleNodes for all the submodules; now we need to create SubmoduleFolderNodes // and insert everything into a tree. var topModule = threadModule.GetTopModule(); // Build a mapping of top-module-relative path to node var pathToNodes = new Dictionary <string, Node>(); // Add existing SubmoduleNodes foreach (var node in submoduleNodes) { pathToNodes[GetNodeRelativePath(topModule, node)] = node; } // Create and add missing SubmoduleFolderNodes foreach (var node in submoduleNodes) { var parts = GetNodeRelativePath(topModule, node).Split('/'); for (int i = 0; i < parts.Length - 1; ++i) { var path = string.Join("/", parts.Take(i + 1)); if (!pathToNodes.ContainsKey(path)) { pathToNodes[path] = new SubmoduleFolderNode(this, parts[i]); } } } // Now build the tree var rootNode = new DummyNode(); var nodesInTree = new HashSet <Node>(); foreach (var node in submoduleNodes) { Node parentNode = rootNode; var parts = GetNodeRelativePath(topModule, node).Split('/'); for (int i = 0; i < parts.Length; ++i) { var path = string.Join("/", parts.Take(i + 1)); var nodeToAdd = pathToNodes[path]; // If node is not already in the tree, add it if (!nodesInTree.Contains(nodeToAdd)) { parentNode.Nodes.AddNode(nodeToAdd); nodesInTree.Add(nodeToAdd); } parentNode = nodeToAdd; } } // Add top-module node, and move children of root to it var topModuleNode = new SubmoduleNode(this, topProject, topProject.Bold, "", topProject.Path); topModuleNode.Nodes.AddNodes(rootNode.Nodes); nodes.AddNode(topModuleNode); }