コード例 #1
0
        //-----------------------------------------------------------------------------------
        public void OnFournisseurTermine(HashSet <CReferenceObjetDependant> setDependances)
        {
            lock (typeof(CLockerArbre))
            {
                List <TreeNode> nodesTypeToCreate = new List <TreeNode>();
                Dictionary <TreeNode, List <TreeNode> > nodesObjetToCreate = new Dictionary <TreeNode, List <TreeNode> >();
                Dictionary <Type, TreeNode>             dicTypeToNode      = new Dictionary <Type, TreeNode>();
                foreach (TreeNode node in m_arbre.Nodes)
                {
                    if (node.Tag is Type)
                    {
                        dicTypeToNode[(Type)node.Tag] = node;
                    }
                }
                m_lblProgression.SetInfo(I.T("Reading @1 element(s)|20014", setDependances.Count.ToString()));
                List <CObjetDonnee> lstObjets = CReferenceObjetDonnee.GetObjets(setDependances, m_objetRacine.ContexteDonnee);
                m_lblProgression.SetInfo(I.T("Adding @1 element(s)|20013", setDependances.Count.ToString()));
                foreach (CObjetDonnee objet in lstObjets)
                {
                    if (objet == null)
                    {
                        continue;
                    }
                    Type     tpObjet  = objet.GetType();
                    TreeNode nodeType = null;
                    if (!dicTypeToNode.TryGetValue(tpObjet, out nodeType))
                    {
                        nodeType = new TreeNode();
                        FillNodeType(nodeType, tpObjet);
                        dicTypeToNode[tpObjet] = nodeType;
                        nodesTypeToCreate.Add(nodeType);
                    }
                    bool bExiste = false;
                    if (objet != null)
                    {
                        foreach (TreeNode node in nodeType.Nodes)
                        {
                            CObjetDonnee objetEx = node.Tag as CObjetDonnee;

                            if (objetEx != null && objetEx.Equals(objet))
                            {
                                bExiste = true;
                                break;
                            }
                        }
                        if (!bExiste)
                        {
                            TreeNode nodeObjet = new TreeNode();
                            FillNodeObjet(nodeObjet, objet);
                            List <TreeNode> lstNodes = null;
                            if (!nodesObjetToCreate.TryGetValue(nodeType, out lstNodes))
                            {
                                lstNodes = new List <TreeNode>();
                                nodesObjetToCreate[nodeType] = lstNodes;
                            }
                            lstNodes.Add(nodeObjet);
                        }
                    }
                }
                Invoke((MethodInvoker) delegate
                {
                    m_arbre.BeginUpdate();
                    foreach (TreeNode node in nodesTypeToCreate)
                    {
                        m_arbre.Nodes.Add(node);
                    }
                    foreach (KeyValuePair <TreeNode, List <TreeNode> > kv in nodesObjetToCreate)
                    {
                        foreach (TreeNode nodeFils in kv.Value)
                        {
                            kv.Key.Nodes.Add(nodeFils);
                        }
                    }
                    m_arbre.EndUpdate();
                });
            }
        }