Exemplo n.º 1
0
        private void FillTreeNodes(
            TemplateNodeInfo parent,
            TreeNodeCollection treeNodes
            )
        {
            List <Tuple <TreeNode, ConcreteTemplateNodeDefinition> > pendingUpdateNodes =
                new List <Tuple <TreeNode, ConcreteTemplateNodeDefinition> >();

            Action action = () =>
            {
                treeNodes.Clear();

                treeNodes.AddRange(parent.Childs.Select(n =>
                {
                    ConcreteTemplateNodeDefinition nodedef;
                    TreeNode node = this._treeControl.CreateTreeViewNode(n, out nodedef);

                    pendingUpdateNodes.Add(new Tuple <TreeNode, ConcreteTemplateNodeDefinition>(node, nodedef));

                    return(node);
                }).ToArray());

                if (parent.ChildrenAreLoadingNow)
                {
                    treeNodes.Add(new TreeNode(this._treeControl._model.LocaleManager.GetLocalizedText(
                                                   "common", "NodesQueryingTreeNodeText")
                                               )
                    {
                        ImageKey         = "NodesQuerying",
                        SelectedImageKey = "NodesQuerying"
                    });
                }
            };

            this._treeControl.SafeInvoke(action);

            foreach (Tuple <TreeNode, ConcreteTemplateNodeDefinition> pendingNode in pendingUpdateNodes)
            {
                TreeNode node = pendingNode.Item1;
                ConcreteTemplateNodeDefinition nodeDef = pendingNode.Item2;

                if (parent.IsDisabled)
                {
                    nodeDef.TemplateNode.IsDisabled = true;
                    nodeDef.NodeActivated           = false;
                }

                nodeDef.NodeAvailable = nodeDef.IsAvailableForDatabase(Program.Model) ?? true;

                if (!nodeDef.NodeAvailable)
                {
                    this._treeControl.SetNotAvailableNode(node);
                }
                else
                {
                    this._treeControl.SetNodeLoaded(node);

                    List <TemplateNodeUpdateJob> refreshJobs = nodeDef.TemplateNode.GetRefreshJob(true);

                    nodeDef.TemplateNode.HasActiveJobs = refreshJobs.Any(
                        job =>
                        job != null &&
                        !job.IsEmpty() &&
                        job.Enabled
                        );

                    UpdateTreeCounts(node, NodeUpdatingSource.LocallyOnly);
                }
            }
        }