예제 #1
0
        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();
        }
예제 #2
0
        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);
                }
            }
        }