コード例 #1
0
        /// /////////////////////////////////////////////////
        public override CResultAErreur AnalyseChaine(string strChaine)
        {
            CResultAErreur result = base.AnalyseChaine(strChaine);

            if (result)
            {
                C2iExpression expression = (C2iExpression)result.Data;
                if (expression != null)
                {
                    expression.SetTypeObjetInterroge(
                        m_contexteAnalyse.ObjetAnalyse,
                        m_contexteAnalyse);
                }
                //Vérifie que tous les champs ont un type de donnée connu
                //(ce qui indique que les champs sont connus)
                foreach (C2iExpressionChamp expChamp in expression.ExtractExpressionsType(typeof(C2iExpressionChamp)))
                {
                    if (expChamp.DefinitionPropriete == null)
                    {
                        result.EmpileErreur(I.T("One field of formula doesn't exist|141"));
                    }
                    else if (expChamp.TypeDonnee == null)
                    {
                        if (m_contexteAnalyse != null && m_contexteAnalyse.GetVariable(expChamp.DefinitionPropriete.NomPropriete) == null)
                        {
                            result.EmpileErreur(I.T("The @1 field doesn't exist|107", expChamp.DefinitionPropriete.Nom));
                        }
                        else
                        {
                            expChamp.DefinitionPropriete = m_contexteAnalyse.GetVariable(expChamp.DefinitionPropriete.NomPropriete);
                        }
                    }
                }
                result = expression.VerifieParametres();
                if (!result)
                {
                    return(result);
                }
                result.Data = expression;
            }
            return(result);
        }
コード例 #2
0
        //--------------------------------------------------
        /// <summary>
        /// crée les éléments graphiques d'une formule
        /// </summary>
        /// <param name="formule"></param>
        public void InitFromFormule(C2iExpression formule)
        {
            m_listeRepresentations.Clear();
            m_listeVariables.Clear();
            if (formule == null)
            {
                return;
            }
            ArrayList lst = formule.ExtractExpressionsType(typeof(C2iExpressionVariable));

            foreach (C2iExpressionVariable variable in lst)
            {
                if (variable.Parametres.Count > 0)
                {
                    C2iExpressionChamp champ = variable.Parametres[0] as C2iExpressionChamp;
                    if (champ != null)
                    {
                        CDefinitionProprieteDynamiqueVariableFormule def = champ.DefinitionPropriete as CDefinitionProprieteDynamiqueVariableFormule;
                        if (def != null)
                        {
                            m_listeVariables.Add(def);
                        }
                    }
                }
            }
            C2iExpressionBegin begin = formule as C2iExpressionBegin;

            m_strIdStartPoint = "";
            int nX = 100;
            int nY = 20;

            if (begin != null)
            {
                CRepresentationExpressionGraphique previous = null;
                foreach (C2iExpression action in begin.Parametres)
                {
                    if (!(action is C2iExpressionVariable))
                    {
                        CRepresentationExpressionGraphique rep = new CRepresentationExpressionGraphique();
                        rep.Position = new Point(nX, nY);
                        AddChild(rep);
                        rep.Parent  = this;
                        rep.Formule = action;
                        nY          = rep.RectangleAbsolu.Bottom;
                        foreach (CRepresentationExpressionGraphique repTmp in m_listeRepresentations)
                        {
                            if (repTmp.RectangleAbsolu.Bottom > nY)
                            {
                                nY = rep.RectangleAbsolu.Bottom;
                            }
                        }
                        nY += 20;
                        if (previous == null)
                        {
                            StartPoint = rep;
                        }
                        else
                        {
                            previous.Next = rep;
                        }
                        previous = rep;
                    }
                }
            }
            else
            {
                CRepresentationExpressionGraphique rep = new CRepresentationExpressionGraphique();
                rep.Position = new Point(nX, nY);
                AddChild(rep);
                rep.Parent  = this;
                rep.Formule = formule;
                StartPoint  = rep;
            }
        }