From 8510bbc053fd803ff9ee64efff042b369705f60d Mon Sep 17 00:00:00 2001 From: eficas <> Date: Fri, 7 Oct 2005 07:52:16 +0000 Subject: [PATCH] pour tenir compte de LASSD --- Accas/A_ASSD.py | 3 + Accas/__init__.py | 1 + Editeur/composimp.py | 26 +- Editeur/eficas_test.py | 9 + Editeur/plusieursbasepanel.py | 443 +++++++++++++++++++++++++--------- 5 files changed, 367 insertions(+), 115 deletions(-) diff --git a/Accas/A_ASSD.py b/Accas/A_ASSD.py index f3898a2a..e9a76ccf 100644 --- a/Accas/A_ASSD.py +++ b/Accas/A_ASSD.py @@ -20,8 +20,10 @@ # ====================================================================== from Ihm import I_ASSD +from Ihm import I_LASSD from Ihm import I_FONCTION from Noyau import N_ASSD +from Noyau import N_LASSD from Noyau import N_GEOM from Noyau import N_FONCTION from Noyau import N_CO @@ -32,6 +34,7 @@ from Noyau import N_CO # dérivation class ASSD(N_ASSD.ASSD,I_ASSD.ASSD):pass +class LASSD(I_LASSD.LASSD,N_LASSD.LASSD):pass class assd(N_ASSD.assd,I_ASSD.ASSD,ASSD):pass diff --git a/Accas/__init__.py b/Accas/__init__.py index 21636df6..c2995f42 100644 --- a/Accas/__init__.py +++ b/Accas/__init__.py @@ -61,6 +61,7 @@ from A_ENSEMBLE import ENSEMBLE from A_A_CLASSER import A_CLASSER from A_ASSD import ASSD,assd +from A_ASSD import LASSD from A_ASSD import GEOM,geom # Pour le moment on laisse fonction (ceinture et bretelles) from A_ASSD import FONCTION, fonction diff --git a/Editeur/composimp.py b/Editeur/composimp.py index 5a0260c1..611f4de6 100644 --- a/Editeur/composimp.py +++ b/Editeur/composimp.py @@ -55,6 +55,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): from plusieurspanel import PLUSIEURS_Panel #print "affect_panel : ",self.nom,self.is_list(),self.has_into(), self.get_into(None) + # Attention l ordre des if est important if self.wait_shell(): # l'objet attend un shell @@ -78,8 +79,8 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): self.panel = PLUSIEURS_ASSD_Panel else: # on attend une liste de valeurs de types debase (entiers, réels,...) - from plusieursbasepanel import PLUSIEURS_BASE_Panel - self.panel = PLUSIEURS_BASE_Panel + from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel + self.panel = PLUSIEURS_BASE_OR_UNELISTE_Panel else: # on n'attend qu'une seule valeur mais de quel type ? if self.wait_co(): @@ -448,6 +449,12 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type) return a + def get_sd_avant_du_bon_type_pour_type_de_base(self): + a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD") + return a + + + #def verif(self): # pass @@ -518,6 +525,16 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): attend un objet de type ASSD ou dérivé, 0 sinon """ return self.object.wait_assd() + def wait_assd_or_type_base(self) : + boo=0 + if len(self.object.definition.type) > 1 : + if self.wait_reel() : + boo = 1 + if 'I' in self.object.definition.type : + boo = 1 + return boo + + def GetType(self): """ Retourne le type de valeur attendu par l'objet représenté par l'item. @@ -568,7 +585,10 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): validite=1 if self.wait_reel(): valeurinter = self.traite_reel(valeur) - valeurretour,validite= self.object.eval_valeur(valeurinter) + if valeurinter != None : + valeurretour,validite= self.object.eval_valeur(valeurinter) + else: + valeurretour,validite= self.object.eval_valeur(valeur) elif self.wait_geom(): valeurretour,validite = valeur,1 else : diff --git a/Editeur/eficas_test.py b/Editeur/eficas_test.py index 4a2d7a51..1e794f03 100644 --- a/Editeur/eficas_test.py +++ b/Editeur/eficas_test.py @@ -57,13 +57,21 @@ def duplique_fichier(code,fichier=None,root=None): import utils import string + from Editeur import session + if fichier != None : + options=session.parse(sys.argv+[fichier]) + else : + options=session.parse(sys.argv) + appli=eficas.EFICAS(root,code=code,fichier = fichier,test=1) format='homard' if convert.plugins.has_key(format): p=convert.plugins[format]() p.readfile(fichier) text=p.convert('exec',appli) + print text text2=convertir(text) + print text2 cata=appli.readercata.cata J=cata[0].JdC(procedure=text2,cata=cata) J.analyse() @@ -71,6 +79,7 @@ def duplique_fichier(code,fichier=None,root=None): if generator.plugins.has_key(format): g=generator.plugins[format]() jdc_formate=g.gener(J,format='beautifie') + print "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh" print jdc_formate jdc_fini = string.replace(jdc_formate,'\r\n','\n') print jdc_fini diff --git a/Editeur/plusieursbasepanel.py b/Editeur/plusieursbasepanel.py index 8ad982c8..4133c67c 100644 --- a/Editeur/plusieursbasepanel.py +++ b/Editeur/plusieursbasepanel.py @@ -37,10 +37,15 @@ from widgets import FenetreDeSelection from widgets import FenetreDeParametre from Noyau.N_CR import justify_text +from Ihm.I_LASSD import LASSD +from Extensions.parametre import PARAMETRE + from utils import substract_list from plusieurspanel import PLUSIEURS_Panel +from uniqueassdpanel import UNIQUE_ASSD_Panel - +import fontes +import math class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): """ @@ -54,91 +59,96 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): Crée la page de saisie d'une liste de valeurs à priori quelconques, cad qui ne sont pas à choisir dans une liste prédéfinie """ + print "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" + print " " + print "A priori on ne doit plus passer dans cette methode " + print " " + print "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), # et la liste des valeurs déjà affectées à l'objet courant - bulle_aide=self.get_bulle_aide() - objet_mc = self.node.item.get_definition() - aide = self.get_aide() - aide = justify_text(texte=aide) - min,max = self.node.item.GetMinMax() - l_valeurs = self.node.item.GetListeValeurs() + #bulle_aide=self.get_bulle_aide() + #objet_mc = self.node.item.get_definition() + #aide = self.get_aide() + #aide = justify_text(texte=aide) + #min,max = self.node.item.GetMinMax() + #l_valeurs = self.node.item.GetListeValeurs() # création des frames globales - self.frame1 = Frame(page,relief='groove',bd=2) - self.frame2 = Frame(page) - self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85) - self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15) - self.frame_right = Frame(self.frame1) - self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.) + #self.frame1 = Frame(page,relief='groove',bd=2) + #self.frame2 = Frame(page) + #self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85) + #self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15) + #self.frame_right = Frame(self.frame1) + #self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.) # création des frames internes - self.frame_valeurs = Frame(self.frame1) - self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95) - self.frame_boutons_fleches = Frame(self.frame_right) - self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5) - self.frame_choix = Frame(self.frame_right) - self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.8) - self.frame_aide = Frame(self.frame_right) - self.frame_aide.place(relx=0.1,rely=0.8,relwidth=0.8,relheight=0.2) - self.frame_boutons = Frame(self.frame2) - self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.) - for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs, - self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons): - fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - fram.bind("",self.parent.appli.efface_aide) + #self.frame_valeurs = Frame(self.frame1) + #self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95) + #self.frame_boutons_fleches = Frame(self.frame_right) + #self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5) + #self.frame_choix = Frame(self.frame_right) + #self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.8) + #self.frame_aide = Frame(self.frame_right) + #self.frame_aide.place(relx=0.1,rely=0.8,relwidth=0.8,relheight=0.2) + #self.frame_boutons = Frame(self.frame2) + #self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.) + #for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs, + # self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons): + # fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + # fram.bind("",self.parent.appli.efface_aide) # création des objets dans les frames - liste_commandes_valeurs = (("",self.selectValeur), - ("",self.deselectValeur), - ("",self.sup_valeur_sans_into)) - self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs, - titre="Valeur(s) actuelle(s)") + #liste_commandes_valeurs = (("",self.selectValeur), + # ("",self.deselectValeur), + # ("",self.sup_valeur_sans_into)) + #self.Liste_valeurs=ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs, + # titre="Valeur(s) actuelle(s)") # Création de l'entry ou de la liste des SD # PN : pour ajouter les validators - self.label = Label(self.frame_choix,text="Valeur :") - self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base) - self.label.place(relx=0.05,rely=0.2) + #self.label = Label(self.frame_choix,text="Valeur :") + #self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base) + #self.label.place(relx=0.05,rely=0.2) # Création d'un bouton "Importer ..." et d'un bouton "Paramatres" sur le panel. - bouton_valeurs_fichier = Button(self.frame_choix, - text="Importer", - command=self.select_in_file) - bouton_valeurs_fichier.place(relx=0.28,rely=0.4,relwidth=0.6) - bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre) - bouton_parametres.place(relx=0.28,rely=0.6,relwidth=0.6) - self.ajout_valeurs = None + #bouton_valeurs_fichier = Button(self.frame_choix, + # text="Importer", + # command=self.select_in_file) + #bouton_valeurs_fichier.place(relx=0.28,rely=0.4,relwidth=0.6) + #bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre) + #bouton_parametres.place(relx=0.28,rely=0.6,relwidth=0.6) + #self.ajout_valeurs = None # boutons Ajouter et Supprimer - bouton_add = Button(self.frame_boutons_fleches, - image = images.get_image('arrow_left'), - command = self.add_valeur_plusieurs_base) - bouton_sup = Button(self.frame_boutons_fleches, - image = images.get_image('arrow_right'), - command = self.sup_valeur_sans_into) - bouton_add.place(relx=0.3,rely=0.35) - bouton_sup.place(relx=0.3,rely=0.65) - # affichage de l'aide - self.frame_aide.update() - self.aide = Label(self.frame_aide, - text = aide, - justify='center', - anchor='center', - wraplength=int(self.frame_aide.winfo_width()*0.8)) - self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1) - self.Liste_valeurs.affiche_liste() - if len(l_valeurs) > 0 : - liste_marque=l_valeurs[-1] - self.Liste_valeurs.surligne(liste_marque) + #bouton_add = Button(self.frame_boutons_fleches, + # image = images.get_image('arrow_left'), + # command = self.add_valeur_plusieurs_base) + #bouton_sup = Button(self.frame_boutons_fleches, + # image = images.get_image('arrow_right'), + # command = self.sup_valeur_sans_into) + #bouton_add.place(relx=0.3,rely=0.35) + #bouton_sup.place(relx=0.3,rely=0.65) + ## affichage de l'aide + #self.frame_aide.update() + #self.aide = Label(self.frame_aide, + # text = aide, + # justify='center', + # anchor='center', + # wraplength=int(self.frame_aide.winfo_width()*0.8)) + #self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1) + #self.Liste_valeurs.affiche_liste() + #if len(l_valeurs) > 0 : + # liste_marque=l_valeurs[-1] + # self.Liste_valeurs.surligne(liste_marque) # boutons Accepter et Annuler - bouton_accepter = Button(self.frame_boutons, - text='Valider', - command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) - bouton_annuler = Button(self.frame_boutons, - text = 'Annuler', - command = self.annule_modifs_valeur) - for but in (bouton_accepter,bouton_annuler): - but.pack(side='left',padx=5) + #bouton_accepter = Button(self.frame_boutons, + # text='Valider', + # command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) + #bouton_annuler = Button(self.frame_boutons, + # text = 'Annuler', + # command = self.annule_modifs_valeur) + #for but in (bouton_accepter,bouton_annuler): + # but.pack(side='left',padx=4) def affiche_parametre(self) : if self.node.item.get_liste_param_possible() != [ ]: @@ -167,14 +177,33 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): return atraiter=[] - try : - for v in valeur: - atraiter.append(v) - except : - atraiter.append(valeur) - + if type(valeur) in (types.ListType,types.TupleType) : + indice = 0 + while (indice < len(valeur)): + v=valeur[indice] + if self.node.item.wait_complex : + if (v== 'RI' or v == 'MP'): + try : + t=tuple([v,valeur[indice+1],valeur[indice+2]]) + atraiter.append(t) + indice=indice+3 + except : + validite=0 + commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python" + self.parent.appli.affiche_infos(commentaire) + return + else : # ce n'est pas un tuple à la mode aster + atraiter.append(v) + indice = indice + 1 + else: # on n'attend pas un complexe + atraiter.append(v) + indice=indice+1 + else: + atraiter.append(valeur) + for valeur in atraiter : encorevalide=self.node.item.valide_item(valeur) + # qdsjfkllllllllllllllllll if encorevalide : listecourante=self.Liste_valeurs.get_liste() encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante) @@ -244,34 +273,40 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): Crée l'entry de saisie de la valeur souhaitée : distingue le cas d'un complexe attendu, d'une autre valeur quelconque """ - if self.node.item.wait_complex(): - self.typ_cplx=StringVar() - self.typ_cplx.set('RI') - rb1 = Radiobutton(frame, text='RI',variable=self.typ_cplx,value='RI') - rb2 = Radiobutton(frame, text='MP',variable=self.typ_cplx,value='MP') - self.entry1 = Pmw.EntryField(frame,validate='real') - self.entry2 = Pmw.EntryField(frame,validate='real') - rb1.place(relx=0.05,rely = 0.4) - rb2.place(relx=0.05,rely = 0.6) - self.entry1.component('entry').bind("",lambda e,s=self:s.entry2.component('entry').focus) - self.entry2.component('entry').bind("",lambda e,c=command:c()) - self.entry1.component('entry').bind("",lambda e,s=self:s.entry2.component('entry').focus) - self.entry2.component('entry').bind("",lambda e,c=command:c()) - self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35) - self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35) - self.entry1.focus() - else: - self.entry = Entry(frame,relief='sunken') - #self.entry.place(relx=0.28,rely=0.2,relwidth=0.6) - self.entry.place(relx=0.28,rely=y,relwidth=0.6) - self.entry.bind("",lambda e,c=command:c()) - self.entry.bind("",lambda e,c=command:c()) - self.entry.focus() + print "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" + print " " + print "A priori on ne doit plus passer dans cette methode " + print " " + print "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" + #if self.node.item.wait_complex(): + # self.typ_cplx=StringVar() + # self.typ_cplx.set('RI') + # rb1 = Radiobutton(frame, text='RI',variable=self.typ_cplx,value='RI') + # rb2 = Radiobutton(frame, text='MP',variable=self.typ_cplx,value='MP') + # self.entry1 = Pmw.EntryField(frame,validate='real') + # self.entry2 = Pmw.EntryField(frame,validate='real') + # rb1.place(relx=0.05,rely = 0.4) + # rb2.place(relx=0.05,rely = 0.6) + # self.entry1.component('entry').bind("",lambda e,s=self:s.entry2.component('entry').focus) + # self.entry2.component('entry').bind("",lambda e,c=command:c()) + # self.entry1.component('entry').bind("",lambda e,s=self:s.entry2.component('entry').focus) + # self.entry2.component('entry').bind("",lambda e,c=command:c()) + # self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35) + # self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35) + # self.entry1.focus() + #else: + # self.entry = Entry(frame,relief='sunken') + # self.entry.place(relx=0.28,rely=0.2,relwidth=0.6) + # self.entry.place(relx=0.28,rely=y,relwidth=0.6) + # self.entry.bind("",lambda e,c=command:c()) + # self.entry.bind("",lambda e,c=command:c()) + # self.entry.focus() def get_valeur(self): """ Retourne la valeur saisie par l'utilisateur dans self.entry """ + commentaire = "" if hasattr(self,'entry'): # Traitement d'une entree unique valeurentree = self.entry.get() @@ -281,6 +316,11 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): valeurs=[] for v in valeurentree.split(','): vsimple,validite=self.node.item.eval_valeur(v) + # Pn If ajoute pour le panneau "double" + if isinstance(vsimple,LASSD) : + commentaire = "impossible de mélanger reels et liste prédéfinie" + validite = 0 + break if validite : valeurs.append(vsimple) else: @@ -289,21 +329,19 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): valeur=valeurs else: valeur,validite=self.node.item.eval_valeur(valeurentree) - if not validite : + if not validite and commentaire == "": commentaire = "impossible d'évaluer : %s " %`valeurentree` - else: - commentaire = "" return valeur,validite,commentaire - else: - # Traitement d'une entree de type complexe - try: - valeur= (self.typ_cplx.get(), - string.atof(self.entry1.get()), - string.atof(self.entry2.get())) - return valeur,1,"" - except: - #traceback.print_exc() - return None,0,"impossible d'évaluer la valeur d'entree" + #else: + # # Traitement d'une entree de type complexe + # try: + # valeur= (self.typ_cplx.get(), + # string.atof(self.entry1.get()), + # string.atof(self.entry2.get())) + # return valeur,1,"" + # except: + # #traceback.print_exc() + # return None,0,"impossible d'évaluer la valeur d'entree" def erase_valeur(self): """ @@ -341,4 +379,185 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): self.entry1.setentry(x1) self.entry2.setentry(x2) +class PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_Panel,UNIQUE_ASSD_Panel): + + def makeValeurPage(self,page): + """ + Crée la page de saisie d'une liste de valeurs à priori quelconques, + cad qui ne sont pas à choisir dans une liste prédéfinie + """ + # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), + # et la liste des valeurs déjà affectées à l'objet courant + bulle_aide=self.get_bulle_aide() + objet_mc = self.node.item.get_definition() + aide = self.get_aide() + aide = justify_text(texte=aide) + aide2 = self.get_aide2() + aide2 = justify_text(texte=aide2) + min,max = self.node.item.GetMinMax() + l_valeurs = self.node.item.GetListeValeurs() + for i in l_valeurs: + if isinstance(i,LASSD) : + affiche_entry=l_valeurs + l_valeurs=() + + # Il faut traiter ici pour avoir le choix entre une liste + # deja constituee (listr8aster) ou manuelle + # création des frames globales + self.frame1 = Frame(page,relief='groove',bd=2) + self.frame2 = Frame(page) + self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.9) + self.frame2.place(relx=0.,rely=0.9,relwidth=1,relheight=0.1) + + # création des frames internes dans frame1 + self.frame_valeurs = Frame(self.frame1) + self.frame_valeurs.place(relx=0.02,rely=0.55,relwidth=0.35,relheight=0.45) + self.frame_haut = Frame(self.frame1) + self.frame_haut.place(relx=0.02,rely=0.02,relwidth=0.98,relheight=0.45) + self.frame_bas = Frame(self.frame1) + self.frame_bas.place(relx=0.37,rely=0.55,relwidth=0.63,relheight=0.45) + + # création des frames internes dans frame_right + self.frame_fleches = Frame(self.frame_bas) + self.frame_fleches.place(relx=0.,rely=0.4,relwidth=0.2,relheight=0.5) + self.frame_choix = Frame(self.frame_bas) + self.frame_choix.place(relx=0.2,rely=0.1,relwidth=0.75,relheight=1) + + # affichage de l'aide + self.aide = Label(self.frame_haut, text = aide, justify='center', anchor='center',) + self.aide.place(relx=0.72,rely=0.25,anchor='center',relwidth=1) + self.aide2 = Label(self.frame2, text = aide2,) + self.aide2.place(relx=0.4,rely=0.01,relwidth=0.6) + + # Création d'un bouton "Importer ..." et d'un bouton "Parametres" sur le panel. + bouton_valeurs_fichier = Button(self.frame_choix, + text="Importer", + command=self.select_in_file) + bouton_valeurs_fichier.place(relx=0.28,rely=0.0,relwidth=0.6) + bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre) + bouton_parametres.place(relx=0.28,rely=0.25,relwidth=0.6) + self.ajout_valeurs = None + + + # Création de la liste des SD + liste_noms_sd = self.node.item.get_sd_avant_du_bon_type_pour_type_de_base() + liste_noms_sd = self.tri(liste_noms_sd) + self.listbox = Pmw.ScrolledListBox(self.frame_haut, + items=liste_noms_sd, + labelpos='n', + #label_text="Structures de données du type\n requis parl'objet courant :", + label_text="Listes du type\n requis parl'objet courant :", + listbox_height = 6, + dblclickcommand=lambda s=self,c=UNIQUE_ASSD_Panel.valid_valeur : s.choose_valeur_from_list(c)) + self.listbox.place(relx=0.00,rely=0.00,relwidth=0.4) + + # On eneleve le label pour gagner de la place + #self.label = Label(self.frame_choix,text="Valeur :") + #self.label.place(relx=0.05,rely=0.85) + self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base,x=0.28,y=0.55) + + # boutons Ajouter et Supprimer + bouton_add = Button(self.frame_fleches, image = images.get_image('arrow_left'), + command = self.add_valeur_plusieurs_base) + bouton_sup = Button(self.frame_fleches, image = images.get_image('arrow_right'), + command = self.sup_valeur_sans_into) + bouton_add.place(relx=0.2,rely=0.25) + bouton_sup.place(relx=0.2,rely=0.70) + + + # boutons Accepter et Annuler dans frame2 + bouton_accepter = Button(self.frame2, text='Valider', + command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) + bouton_annuler = Button(self.frame2, text = 'Annuler', + command = self.annule_modifs_valeur) + for but in (bouton_accepter,bouton_annuler): + but.pack(side='left',padx=4) + + # création des objets dans les frames + liste_commandes_valeurs = (("",self.selectValeur), + ("",self.deselectValeur), + ("",self.sup_valeur_sans_into)) + self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs, + liste_commandes = liste_commandes_valeurs, + titre="Valeur(s) non-prédéfinies(s)", + fonte_titre=None + ) + + for fram in (self.frame1,self.frame2,self.frame_bas,self.frame_haut,self.frame_valeurs, + self.frame_fleches,self.frame_choix): + fram.bind("",lambda e,s=self,a=bulle_aide: s.parent.appli.affiche_aide(e,a)) + fram.bind("",self.parent.appli.efface_aide) + + self.Liste_valeurs.affiche_liste() + if len(l_valeurs) > 0 : + liste_marque=l_valeurs[-1] + self.Liste_valeurs.surligne(liste_marque) + + def get_aide(self): + """ + Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs + saisies par l'utilisateur + """ + commentaire="Ce motclef accepte soit un nom de liste déja définie soit une liste manuelle de valeurs" + return commentaire + + def get_aide2(self): + min,max = self.node.item.GetMinMax() + aideval=self.node.item.aide() + commentaire="min : " + str(min) + ", max : " + str(max) + aideval=commentaire + aideval + return aideval + + def choose_valeur_from_list(self,command): + """ + Affecte à valeur choisie la sélection courante dans la liste des choix proposés + Exécute command + """ + self.Liste_valeurs.liste=[] + self.Liste_valeurs.affiche_liste() + if len(self.listbox.get()) == 0 : return + choix = self.listbox.getcurselection()[0] + d={} + d["valeurentree"]=choix + apply(command,(self,),d) + + + + def tri(self,liste_noms_sd): + a=(3+8j) + d_types = { 'TXM' : type('A'), + 'R' : type(3.), + 'I' : type(0), + 'C' : type(a)} + + # On enelve seulement ceux qu'on peut + # Sur certaines listes, il est possible qu'on ne + # sache pas déterminer le type + listefinale=[] + typespossibles=self.node.item.object.definition.type + typecherche = None + for t in typespossibles: + if t in d_types.keys() : + typecherche = d_types[t] + break + for liste in liste_noms_sd: + valeur,validite=self.node.item.eval_valeur(liste) + for mc in valeur.etape.mc_liste : + try : + if type(mc.valeur) in (types.ListType,types.TupleType) : + typeliste=type(mc.valeur[0]) + else : + typeliste=type(mc.valeur) + if type(mc.valeur[0]) == typecherche: + listefinale.append(liste) + except: + listefinale.append(liste) + return listefinale + + def make_entry(self,frame,command,x=0.28,y=0.2): + self.entry = Entry(frame,relief='sunken') + self.entry.place(relx=0.28,rely=y,relwidth=0.6) + self.entry.bind("",lambda e,c=command:c()) + self.entry.bind("",lambda e,c=command:c()) + self.entry.focus() -- 2.39.2