public void Init(CRepresentationExpressionGraphique exp, IFournisseurProprietesDynamiques fournisseur, CObjetPourSousProprietes objetAnalyse) { m_fournisseur = fournisseur; m_objetAnalyse = objetAnalyse; m_panelControls.SuspendDrawing(); try { m_bIsInitialising = true; m_expressionEditee = exp; m_txtFormule.Init(fournisseur, objetAnalyse); m_txtFormule.Formule = exp.Formule; foreach (Control ctrl in m_panelControls.Controls) { CEditeurParametreFormule editeur = ctrl as CEditeurParametreFormule; if (editeur != null && !m_reserve.Contains(editeur)) { editeur.Visible = false; m_reserve.Add(editeur); } } if (exp.Formule == null) { m_panelControls.Visible = false; return; } m_panelControls.Visible = true; C2iExpressionAnalysable formule = exp.Formule as C2iExpressionAnalysable; if (formule != null) { int nNbParametres = 0; CInfo2iExpression info = formule.GetInfos(); foreach (CInfo2iDefinitionParametres par in info.InfosParametres) { nNbParametres = Math.Max(par.TypesDonnees.Length, nNbParametres); } for (int nParam = 0; nParam < nNbParametres; nParam++) { CEditeurParametreFormule editeur = null; editeur = GetNewEditeur(); editeur.Dock = DockStyle.Top; editeur.BringToFront(); editeur.Init(exp, nParam, fournisseur, objetAnalyse); editeur.Visible = true; } } else { int nParam = 0; foreach (C2iExpression f in exp.Formule.Parametres2i) { CEditeurParametreFormule editeur = null; editeur = GetNewEditeur(); editeur.Dock = DockStyle.Top; editeur.BringToFront(); editeur.Init(exp, nParam, fournisseur, objetAnalyse); editeur.Visible = true; nParam++; } } } catch { } finally { m_bIsInitialising = false; m_panelControls.ResumeDrawing(); } RecalcObjetsAnalyse(); }
private void m_timerDelayInterprete_Tick(object sender, EventArgs e) { m_timerDelayInterprete.Stop(); if (m_txtFormule.Formule != null) { m_expressionEditee.Formule = m_txtFormule.Formule; m_expressionEditee.LastErreur = ""; C2iExpression[] parametres = m_txtFormule.Formule.Parametres2i; Dictionary <int, CEditeurParametreFormule> parametresVus = new Dictionary <int, CEditeurParametreFormule>(); List <CEditeurParametreFormule> lstEditeurs = new List <CEditeurParametreFormule>(); foreach (Control ctrl in m_panelControls.Controls) { CEditeurParametreFormule editeur = ctrl as CEditeurParametreFormule; if (editeur != null && !m_reserve.Contains(editeur))//Ce n'est pas un éditeur de reserve ! { parametresVus[editeur.NumParametre] = editeur; editeur.ReloadParametre(); lstEditeurs.Add(editeur); } } m_panelControls.Visible = true; for (int n = 0; n < parametres.Length; n++) { if (!parametresVus.ContainsKey(n)) { CEditeurParametreFormule editeur = GetNewEditeur(); editeur.Dock = DockStyle.Top; editeur.BringToFront(); editeur.Init(m_expressionEditee, n, m_fournisseur, m_objetAnalyse); editeur.Visible = true; parametresVus[n] = editeur; lstEditeurs.Add(editeur); } } RecalcObjetsAnalyse(); //Supprime les éditeurs superflus //tri les éditeurs lstEditeurs.Sort((x, y) => x.NumParametre.CompareTo(y.NumParametre)); foreach (CEditeurParametreFormule editeur in lstEditeurs) { editeur.BringToFront(); } if (lstEditeurs.Count > 0) { CEditeurParametreFormule editeur = lstEditeurs[lstEditeurs.Count - 1]; while (editeur != null && editeur.NumParametre >= parametres.Length && editeur.Formule == null) { editeur.Visible = false; m_reserve.Add(editeur); lstEditeurs.Remove(editeur); if (lstEditeurs.Count > 0) { editeur = lstEditeurs[lstEditeurs.Count - 1]; } else { editeur = null; } } } if (OnChangeDessin != null) { OnChangeDessin(this, null); } } }