From 277e53856e5b826d6d495db3ff575118547cb9d4 Mon Sep 17 00:00:00 2001 From: eficas <> Date: Fri, 25 Feb 2005 11:45:32 +0000 Subject: [PATCH] PN pour notation scientifique --- Editeur/appli.py | 9 +-- Editeur/autre_analyse_cata.py | 23 +++++--- Editeur/bureau.py | 4 +- Editeur/composimp.py | 10 +++- Editeur/newsimppanel.py | 25 ++++++++ Editeur/readercata.py | 4 +- Editeur/uniquebasepanel.py | 3 + Editeur/uniquepanel.py | 3 + Ihm/I_MCSIMP.py | 28 ++++++++- convert/convert_python.py | 7 ++- convert/parseur_python.py | 104 +++++++++++++++++++++++++++++++++- 11 files changed, 199 insertions(+), 21 deletions(-) diff --git a/Editeur/appli.py b/Editeur/appli.py index e0d8c42b..3b2e2d30 100644 --- a/Editeur/appli.py +++ b/Editeur/appli.py @@ -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 diff --git a/Editeur/autre_analyse_cata.py b/Editeur/autre_analyse_cata.py index 286ec1c6..a9650f06 100644 --- a/Editeur/autre_analyse_cata.py +++ b/Editeur/autre_analyse_cata.py @@ -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__" : diff --git a/Editeur/bureau.py b/Editeur/bureau.py index e21702e4..86c7841b 100644 --- a/Editeur/bureau.py +++ b/Editeur/bureau.py @@ -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() - diff --git a/Editeur/composimp.py b/Editeur/composimp.py index cbde7284..cd9971b0 100644 --- a/Editeur/composimp.py +++ b/Editeur/composimp.py @@ -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'): diff --git a/Editeur/newsimppanel.py b/Editeur/newsimppanel.py index a9c69f17..603e8513 100644 --- a/Editeur/newsimppanel.py +++ b/Editeur/newsimppanel.py @@ -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 + diff --git a/Editeur/readercata.py b/Editeur/readercata.py index 399142d3..2676d25f 100644 --- a/Editeur/readercata.py +++ b/Editeur/readercata.py @@ -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)" ) diff --git a/Editeur/uniquebasepanel.py b/Editeur/uniquebasepanel.py index 7af7ac69..ddb53906 100644 --- a/Editeur/uniquebasepanel.py +++ b/Editeur/uniquebasepanel.py @@ -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() diff --git a/Editeur/uniquepanel.py b/Editeur/uniquepanel.py index 1fb23286..74475aac 100644 --- a/Editeur/uniquepanel.py +++ b/Editeur/uniquepanel.py @@ -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` diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index c18fa5e2..f53bd00e 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -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() diff --git a/convert/convert_python.py b/convert/convert_python.py index 0051c146..999dac50 100644 --- a/convert/convert_python.py +++ b/convert/convert_python.py @@ -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 + diff --git a/convert/parseur_python.py b/convert/parseur_python.py index 789f2a1c..cd522028 100644 --- a/convert/parseur_python.py +++ b/convert/parseur_python.py @@ -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