]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
PN pour notation scientifique
authoreficas <>
Fri, 25 Feb 2005 11:45:32 +0000 (11:45 +0000)
committereficas <>
Fri, 25 Feb 2005 11:45:32 +0000 (11:45 +0000)
Editeur/appli.py
Editeur/autre_analyse_cata.py
Editeur/bureau.py
Editeur/composimp.py
Editeur/newsimppanel.py
Editeur/readercata.py
Editeur/uniquebasepanel.py
Editeur/uniquepanel.py
Ihm/I_MCSIMP.py
convert/convert_python.py
convert/parseur_python.py

index e0d8c42b7ab3c3208752e36abb5529f72c06ea93..3b2e2d30d71b6c09c978e3a99bddc71a478dfd4e 100644 (file)
@@ -53,6 +53,8 @@ class APPLI:
       self.top.title(VERSION + ' pour '+self.code)
       self.top.withdraw()
       self.initializeTk(master)
+      self.dict_reels={}
+      self.liste_simp_reel=[]
       # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
       # Si test est different de 0, les panneaux ne sont pas activés
       self.test=test
@@ -62,6 +64,9 @@ class APPLI:
       self.message=''
       self.cree_composants_graphiques()
       self.load_appli_composants()                     # Creation du BUREAU
+      # PN : ajout d un attribut pour indiquer si 
+      # l appli a ete lance depuis Salome
+      self.salome=0
       if (self.test == 0):
            splash.fini_splash()
            self.affiche_FAQ()
@@ -73,11 +78,7 @@ class APPLI:
            else:
               self.bureau.openJDC( fich)
       # AY : fin
-      # PN : ajout d un attribut pour indiquer si 
-      # l appli a ete lance depuis Salome
-      self.salome=0
 
-     
 
   def send_message(self,message):
       self.message=message
index 286ec1c68370e1224d5ae9378deb7caee33c42b9..a9650f06a3d81cdaee133e96ad18eba4f95ab98c 100644 (file)
@@ -38,7 +38,7 @@ def traite_entiteNUPL(entite):
    """
    entite.ordre_mc=[]
 
-def traite_entite(entite):
+def traite_entite(entite,liste_simp_reel):
    """
        Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
        qui est une liste contenant le nom des sous entites dans l'ordre 
@@ -53,19 +53,26 @@ def traite_entite(entite):
       if isinstance(v,NUPL):
          traite_entiteNUPL(v)
       else:
-         traite_entite(v)
+         traite_reel(v,liste_simp_reel)
+         traite_entite(v,liste_simp_reel)
       l.append((v._no,k))
    l.sort()
    entite.ordre_mc=[ item for index, item in l ]
 
-def analyse_niveau(cata_ordonne_dico,niveau):
+def traite_reel(objet,liste_simp_reel):
+    if objet.__class__.__name__ == "SIMP":
+       if ( 'R' in objet.type):
+          if objet.nom not in liste_simp_reel :
+             liste_simp_reel.append(objet.nom)
+
+def analyse_niveau(cata_ordonne_dico,niveau,liste_simp_reel):
    """
        Analyse un niveau dans un catalogue de commandes
    """
    if niveau.l_niveaux == ():
        # Il n'y a pas de sous niveaux
        for oper in niveau.entites:
-           traite_entite(oper)
+           traite_entite(oper,liste_simp_reel)
            cata_ordonne_dico[oper.nom]=oper
    else:
        for niv in niveau.l_niveaux:
@@ -80,15 +87,17 @@ def analyse_catalogue(cata):
       du catalogue indexées par leur nom
    """
    cata_ordonne_dico={}
+   liste_simp_reel=[]
    if cata.JdC.l_niveaux == ():
        # Il n'y a pas de niveaux
+       a=1
        for oper in cata.JdC.commandes:
-           traite_entite(oper)
+           traite_entite(oper,liste_simp_reel)
            cata_ordonne_dico[oper.nom]=oper
    else:
        for niv in cata.JdC.l_niveaux:
-           analyse_niveau(cata_ordonne_dico,niv)
-   return cata_ordonne_dico
+           analyse_niveau(cata_ordonne_dico,niv,liste_simp_reel)
+   return cata_ordonne_dico,liste_simp_reel
 
 
 if __name__ == "__main__" :
index e21702e443af4acb5ebbf5d44bac6b2610076daf..86c7841be95254c95b921562bb6a51054cda69f2 100644 (file)
@@ -107,6 +107,7 @@ class BUREAU:
       self.liste_JDCDisplay=[]
       comploader.charger_composants()
       self.cree_cataitem()
+      self.text_reel=""
 
    def cree_cataitem(self):
       """
@@ -271,7 +272,7 @@ class BUREAU:
          # Le convertisseur existe on l'utilise
          p=convert.plugins[format]()
          p.readfile(file)
-         text=p.convert('exec')
+         text=p.convert('exec',self.appli)
          if not p.cr.estvide(): 
             self.appli.affiche_infos("Erreur à la conversion")
             Fenetre(self.appli,
@@ -666,4 +667,3 @@ class BUREAU:
    def update_jdc_courant(self):
       self.JDCDisplay_courant.update()
 
-
index cbde72849105f1b0e7558287434e2518890a9224..cd9971b0347fa5a389b0b7aae2186a9c77fd6fd2 100644 (file)
@@ -233,7 +233,15 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
 
   def GetListeValeurs(self) :
       """ Retourne la liste des valeurs de object """
-      return self.object.get_liste_valeurs()
+      valeurs=self.object.get_liste_valeurs()
+      try :
+        if "R" in self.object.definition.type:
+           clef=self.object.GetNomConcept()
+           if self.appli.dict_reels.has_key(clef):
+              valeurs=self.appli.dict_reels[clef]
+      except :
+        pass
+      return valeurs
     
   def get_liste_possible(self,listeActuelle=[]):
       if hasattr(self.definition.validators,'into'):
index a9c69f1752b6a561acd83a2e748e29e495d6550f..603e8513456c9daf4b2ef4801ecf0a79ecce190a 100644 (file)
@@ -183,3 +183,28 @@ class newSIMPPanel(panels.OngletPanel):
       except:
          pass
 
+# ----------------------------------------------------------------------------------------
+#   Méthodes utilisées pour la manipulation des items en notation scientifique
+# ----------------------------------------------------------------------------------------
+  def set_valeur_texte(self,texte_valeur) :
+      """ Sert à mettre à jour la notation scientifique"""
+      try :
+        if "R" in self.node.item.object.definition.type:
+            if texte_valeur[0] != "'":
+               clef=eval(texte_valeur)
+               if str(clef) != str(texte_valeur) :
+                  clefobj=self.node.item.object.GetNomConcept()
+                  self.parent.appli.dict_reels[clefobj][clef]=texte_valeur
+      except:
+        pass
+
+
+  def get_valeur_texte(self,valeur) :
+     valeur_texte=""
+     if "R" in self.node.item.object.definition.type:
+        clefobj=self.node.item.object.GetNomConcept()
+        if self.parent.appli.dict_reels.has_key(clefobj):
+           if self.parent.appli.dict_reels[clefobj].has_key(valeur):
+              valeur_texte=self.parent.appli.dict_reels[clefobj][valeur]
+     return valeur_texte
index 399142d30a9d13918a60f078ae3192e8eece0bec..2676d25f8b01a28aea6413832c1b57bc8200daa1 100644 (file)
@@ -193,7 +193,7 @@ class READERCATA:
           Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
           contient le nom des mots clés dans le bon ordre
       """ 
-      self.cata_ordonne_dico=autre_analyse_cata.analyse_catalogue(self.cata)
+      self.cata_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
 
    def Retrouve_Ordre_Cata_Standard(self):
       """ 
@@ -245,7 +245,7 @@ class READERCATA:
       message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
       if self.appli.test == 0 :
          splash._splash.configure(text = message,barre='oui')
-      cata_dev_ordonne_dico = autre_analyse_cata.analyse_catalogue(self.cata_dev)
+      cata_dev_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
       self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
       self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
 
index 7af7ac69b1f55a1b5018667a1531d33673fea06a..ddb53906d43f06f3d56800413fa6bd64e299e513 100644 (file)
@@ -129,6 +129,9 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel):
       """
       valeur = self.node.item.get_valeur()
       if valeur == None or valeur == '' : return # pas de valeur à afficher ...
+      valeur_texte=self.get_valeur_texte(valeur)
+      if valeur_texte != "":
+         valeur=valeur_texte
       self.entry.delete(0,END)
       self.entry.insert(0,valeur)
       self.entry.focus()
index 1fb232862f093b6da0dfbaf56cb8cb4cfefae508..74475aaca3ff209ea41b55a4d78ef350912a9bda 100644 (file)
@@ -58,6 +58,7 @@ class UNIQUE_Panel(newSIMPPanel):
       """
       return self.entry.get()
     
+  
   def valid_valeur(self):
       """
       Teste si la valeur fournie par l'utilisateur est une valeur permise :
@@ -75,6 +76,8 @@ class UNIQUE_Panel(newSIMPPanel):
              return
    
       test = self.node.item.set_valeur(valeur)
+      if test :
+          self.set_valeur_texte(str(valeurentree))
        
       if not test :
           mess = "impossible d'évaluer : %s " %`valeur`
index c18fa5e260305e9292e287897ea4f44c4c97d96f..f53bd00ec64d7bc3d4c7d70ce1ab411b2fe5505c 100644 (file)
@@ -46,18 +46,39 @@ from Extensions import parametre
 import I_OBJECT
 
 class MCSIMP(I_OBJECT.OBJECT):
+
+  def GetNomConcept(self):
+      p=self
+      while p.parent :
+         try :
+            nomconcept=p.get_sdname()
+            return nomconcept
+         except:
+            try :
+               nomconcept= p.object.get_sdname()
+               return nomconcept
+            except :
+               pass
+         p=p.parent
+      return ""
+
   def GetText(self):
     """
         Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
         pointé par self
     """
+
     if self.valeur == None : 
       return None
     elif type(self.valeur) == types.FloatType : 
       # Traitement d'un flottant isolé
-      #txt = repr_float(self.valeur)
+      # txt = repr_float(self.valeur)
       # Normalement str fait un travail correct
       txt = str(self.valeur)
+      clefobj=self.GetNomConcept()
+      if self.jdc.appli.dict_reels.has_key(clefobj):
+        if self.jdc.appli.dict_reels[clefobj].has_key(self.valeur):
+           txt=self.jdc.appli.dict_reels[clefobj][self.valeur]
     elif type(self.valeur) in (types.ListType,types.TupleType) :
       # Traitement des listes
       txt='('
@@ -99,6 +120,11 @@ class MCSIMP(I_OBJECT.OBJECT):
        Retourne une chaîne de caractère représentant la valeur de self 
     """
     val=self.valeur
+    if type(val) == types.FloatType : 
+      clefobj=self.GetNomConcept()
+      if self.jdc.appli.dict_reels.has_key(clefobj):
+        if self.jdc.appli.dict_reels[clefobj].has_key(val):
+           return self.jdc.appli.dict_reels[clefobj][val]
     if type(val) != types.TupleType :
       try:
         return val.get_name()
index 0051c1465ca055fc3904dc52117badd06d3d8444..999dac50291dd84bf325bd5f6777256349e5277b 100644 (file)
@@ -102,11 +102,11 @@ class PythonParser:
       except:
          self.cr.fatal("Impossible ouvrir fichier %s" % filename)
          return
-
-   def convert(self,outformat):
+   
+   def convert(self,outformat,appli=None):
       if outformat == 'exec':
          try:
-            return parseur_python.PARSEUR_PYTHON(self.text).get_texte()
+            return parseur_python.PARSEUR_PYTHON(self.text).get_texte(appli)
          except:
             # Erreur lors de la conversion
             l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
@@ -123,3 +123,4 @@ class PythonParser:
          raise "Format de sortie : %s, non supporté"
          return None
 
+
index 789f2a1c6be347f789b842b95cded93aa80f6ebc..cd52202832bbcbca14d51c9df874e3d2555fe551 100644 (file)
@@ -159,6 +159,7 @@ class PARSEUR_PYTHON:
     def __init__(self,texte):
         self.texte = texte
         self.l_objets=None
+        self.appli=None
 
     def is_affectation(self,texte):
         """
@@ -285,6 +286,10 @@ class PARSEUR_PYTHON:
                         commande_courante.append_text(ligne)
                         if commande_courante.get_nb_par() == 0:
                             # la commande courante est terminée (autant de parenthèses fermantes qu'ouvrantes)
+                            try :
+                               self.analyse_reel(commande_courante.texte)
+                            except :
+                               pass
                             commande_courante = None
                     else:
                         # il peut s'agir d'une commande ou d'une affectation ...
@@ -306,6 +311,7 @@ class PARSEUR_PYTHON:
                             affectation_courante = None
                             if commande_courante.get_nb_par() == 0:
                                 # la commande courante est terminée (autant de parenthèses fermantes qu'ouvrantes)
+                                self.analyse_reel(commande_courante.texte)
                                 commande_courante = None
                         else:
                             #--> poursuite d'une affectation
@@ -315,10 +321,106 @@ class PARSEUR_PYTHON:
                             #affectation_courante.append_text(ligne)
 
 
-    def get_texte(self):
+    def enleve (self,texte) :
+        i=0
+        chaine=""
+        while (i<len(texte)):
+          if (texte[i] == " " or texte[i] == "\n" or texte[i] == "\t") :
+             i=i+1
+          else :
+             chaine=chaine+texte[i]
+             i=i+1
+        return chaine 
+            
+    def construit_genea(self,texte):
+        indiceC=0
+        mot=""
+        dict_reel_concept={}
+
+        # traitement pour chaque caractere
+        while (indiceC < len(texte)): 
+           c=texte[indiceC]
+           if ( c == "," or c == "(" or c == ")"):
+              mot=""
+           elif ( c== "="):
+              valeur=""
+              nouvelindice=indiceC+1
+              if texte[nouvelindice] != "(":
+                 while ( texte[nouvelindice] != ","):
+                    valeur=valeur+texte[nouvelindice]
+                    nouvelindice=nouvelindice+1
+                    if nouvelindice == len(texte) :
+                       nouvelindice=nouvelindice -1
+                        break
+                 if mot in self.appli.liste_simp_reel:
+                    if valeur[0] != "'":
+                       try :
+                         clef=eval(valeur)
+                         if str(clef) != str(valeur) :
+                            dict_reel_concept[clef]=valeur
+                       except :
+                         pass
+                 mot=""
+                 indiceC=nouvelindice
+              else:
+               # s agit -il d un tuple 
+                 if texte[nouvelindice+1] != "(":
+                    tuple=False
+                    while ( texte[nouvelindice] != "="):
+                       if texte[nouvelindice] == ")" :
+                          tuple=True
+                          break
+                       else :
+                          nouvelindice=nouvelindice+1
+                          if nouvelindice == len(texte) :
+                            nouvelindice=nouvelindice -1
+                             break
+                    if tuple :
+                       valeur=texte[indiceC+1:nouvelindice+1]
+                       indiceC=nouvelindice+1 
+                       if mot in self.appli.liste_simp_reel:
+                          valeur=valeur[1:-1]
+                          for val in valeur.split(',') :
+                          # Attention la derniere valeur est""
+                             try :
+                                if val[0] != "'":
+                                  clef=eval(val)
+                                  if str(clef) != str(val) :
+                                     dict_reel_concept[clef]=val
+                             except :
+                                  pass
+                       mot=""
+               # ou de ( imbriqueés
+                 else :
+                    mot=""
+           else :
+              mot=mot+texte[indiceC]
+           indiceC=indiceC+1
+        # traitement du dernier inutile
+        # c est un ; 
+        return dict_reel_concept
+
+    def analyse_reel(self,commande) :
+        nomConcept=None
+        # On verifie qu on a bien un OPER
+        # et pas une MACRO
+        if commande.find("=") > commande.find("(") :
+           return
+        if commande.find("=") > 0:
+           epure1=self.enleve(commande)
+           nomConcept=epure1.split("=")[0]
+           index=epure1.find("=")
+           epure2=epure1[index+1:len(epure1)].replace("_F(","(")
+           dict_reel_concept=self.construit_genea(epure2)
+        if nomConcept !=None :
+           if len(dict_reel_concept) != 0:
+              self.appli.dict_reels[nomConcept]=dict_reel_concept
+
+    def get_texte(self,appli=None):
         """
         Retourne le texte issu de l'analyse
         """
+        self.appli=appli
         if not self.l_objets : self.analyse()
         txt=''
         for obj in self.l_objets: