1 #@ MODIF composimp Editeur DATE 05/09/2001 AUTEUR DURAND C.DURAND
2 # CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
5 # SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
6 # REDISTRIBUTION OF THIS FILE.
7 # ======================================================================
11 from tkFileDialog import *
12 from tkMessageBox import showinfo
13 from copy import copy,deepcopy
19 from widgets import ListeChoix
20 from widgets import FenetreDeSelection
22 from Noyau.N_CR import justify_text
23 from utils import substract_list
26 class newSIMPPanel(panels.OngletPanel):
28 Classe virtuelle servant de classe mère à toutes les classes Panel
29 servant à afficher et récupérer la valeur d'un mot-clé simple.
30 Le panel est différent suivant le type de la valeur attendu
34 Méthode appelée par le constructeur de OngletPanel :
35 construit le notebook à 2 onglets utilisé par tous les panels de
36 tous les mots-clés simples
38 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
39 nb.pack(fill = 'both', expand = 1)
41 nb.add('Valeur', tab_text='Saisir valeur')
42 #nb.add('Commentaire',tab_text='Insérer commentaire')
43 self.makeValeurPage(nb.page('Valeur'))
44 #self.makeCommentairePage(nb.page("Commentaire"))
47 # ----------------------------------------------------------------------------------------
48 # Méthodes utlisées pour l'affectation de la valeur donnée par l'utilisateur
50 # ----------------------------------------------------------------------------------------
52 def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
54 Enregistre val comme valeur de self.node.item.object SANS faire de test de validité
56 if self.parent.modified == 'n' : self.parent.init_modif()
60 valeur= self.entry.get()
61 self.entry.delete(0,END)
62 self.node.item.set_valeur(valeur,evaluation='non')
63 self.parent.appli.affiche_infos(mess)
64 if self.node.item.get_position()=='global':
65 self.node.etape.verif_all()
66 elif self.node.item.get_position()=='global_jdc':
67 self.node.racine.verif_all()
69 self.node.parent.verif()
70 if self.node.item.isvalid():
71 self.node.parent.select()
73 # ----------------------------------------------------------------------------------------
74 # Méthodes utlisées pour la manipulation des items dans les listes de choix
75 # ----------------------------------------------------------------------------------------
76 def selectValeur(self,name):
77 self.selected_valeur = name
79 def deselectValeur(self,name):
80 self.selectValeur = None
82 def sup_valeur(self,name=None):
84 Supprime la valeur selectionnée de la liste des valeurs et la rajoute
85 à la liste des choix possibles
87 liste_valeurs = self.Liste_valeurs.get_liste()
88 liste_valeurs.remove(self.selected_valeur)
89 liste_choix = self.node.item.get_definition().into
90 liste_choix = substract_list(liste_choix,liste_valeurs)
91 self.Liste_valeurs.put_liste(liste_valeurs)
92 self.Liste_choix.put_liste(liste_choix)
93 self.selected_valeur = None
95 def add_choix(self,name=None):
97 Ajoute le choix selectionné à la liste des valeurs et le retire
98 de la liste des choix possibles
100 min,max = self.node.item.GetMinMax()
101 liste_valeurs = self.Liste_valeurs.get_liste()
102 if len(liste_valeurs) >= max :
103 self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
105 liste_valeurs.append(self.selected_choix)
106 liste_choix = self.Liste_choix.get_liste()
107 liste_choix.remove(self.selected_choix)
108 self.Liste_valeurs.put_liste(liste_valeurs)
109 self.Liste_choix.put_liste(liste_choix)
110 self.selected_choix = None
112 def selectChoix(self,name):
113 self.selected_choix = name
115 def deselectChoix(self,name):
116 self.selectChoix = None
118 class SHELLPanel(newSIMPPanel):
120 Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur
123 def makeValeurPage(self,page):
125 Affiche la page concernant l'objet pointé par self qui attend un shell
127 objet_mc = self.node.item.get_definition()
128 aide = self.gen_aide()
129 aide = justify_text(texte=aide)
130 self.frame = Frame(page)
131 self.frame.place(relx=0,rely=0,relwidth=1,relheight=1)
132 label_aide = Label(self.frame,text = aide)
133 label_aide.place(relx=0.5,rely=0.1,anchor='center')
134 self.text = Text(self.frame,bg='gray95')
135 self.text.place(relx=0.2,rely=0.2,relwidth=0.6,relheight=0.6)
136 but_val = Button(self.frame,text='Valider',command = self.valide_shell)
137 but_ann = Button(self.frame,text='Annuler',command = self.annule_shell)
138 but_val.place(relx=0.35,rely=0.9,anchor='center')
139 but_ann.place(relx=0.65,rely=0.9,anchor='center')
140 self.display_valeur()
144 Retourne une chaîne de caractères d'aide sur la valeur qu'attend l'objet
147 return "Un shell est attendu"
149 def valide_shell(self,event=None):
151 Récupère la valeur saisie par l'utilisateur dans self.text
152 et la stocke dans l'objet MCSIMP courant
154 texte = self.text.get(1.0,END)
155 self.record_valeur(texte)
157 def annule_shell(self,event=None):
159 Annule toute saisie dans self.text
161 self.text.delete(0,END)
163 def display_valeur(self,val=None):
165 Affiche la valeur de l'objet pointé par self
170 valeur = self.node.item.get_valeur()
171 if valeur == None : return
172 self.text.insert(END,valeur)
174 class PLUSIEURS_Panel(newSIMPPanel):
176 Classe virtuelle servant de classe mère à toutes celles définissant
177 un panneau pour un mot-clé simple qui attend une liste de valeurs
179 def accepte_modifs_valeur(self,min,max):
181 Méthode qui récupère la liste des valeurs donnée par l'utilisateur
182 et l'affecte au mot-clé courant.
184 l_valeurs = self.Liste_valeurs.get_liste()
185 longueur = len(l_valeurs)
186 if longueur < min or longueur > max :
187 self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
190 valeur = tuple(l_valeurs)
192 valeur = l_valeurs[0]
195 self.parent.appli.affiche_infos("Valeur acceptée")
196 self.record_valeur(valeur)
197 if self.node.item.isvalid():
198 self.node.parent.select()
199 # fermeture de la fenêtre de sélection
\r
200 if self.ajout_valeurs:
\r
201 self.ajout_valeurs.quit()
\r
203 def annule_modifs_valeur(self):
205 RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
208 # fermeture de la fenêtre de sélection
\r
209 if self.ajout_valeurs:
\r
210 self.ajout_valeurs.quit()
\r
212 def traite_reel(self,valeur):
214 Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel
215 ou de détecter si on fait référence à un concept produit par DEFI_VALEUR
218 valeur = string.strip(valeur)
219 liste_reels = self.node.item.get_sd_avant_du_bon_type()
220 if valeur in liste_reels:
222 if len(valeur) >= 3 :
223 if valeur[0:4] == 'EVAL' :
224 # on a trouvé un EVAL --> on retourne directement la valeur
226 if string.find(valeur,'.') == -1 :
227 # aucun '.' n'a été trouvé dans valeur --> on en rajoute un à la fin
232 def add_valeur_sans_into(self,name=None):
234 Lit ce que l'utilisateur a saisi dans self.entry et cherche à
236 - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
237 - sinon elle est refusée
239 min,max = self.node.item.GetMinMax()
243 valeur = self.get_valeur()
244 if self.node.item.wait_reel():
245 valeur = self.traite_reel(valeur)
246 if self.node.item.wait_geom():
249 val,test1 = self.node.item.object.eval_valeur(valeur)
251 test2 = self.node.item.object.verif_type(val)
253 liste_valeurs = self.Liste_valeurs.get_liste()
254 if len(liste_valeurs) >= max :
255 self.parent.appli.affiche_infos("La liste a déjà atteint le nombre maximum d'éléments, ajout refusé")
258 liste_valeurs.append(val)
259 self.Liste_valeurs.put_liste(liste_valeurs)
261 self.parent.appli.affiche_infos("Nouvelle valeur acceptée")
263 self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
265 print "impossible d'évaluer %s" %val
266 self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
267 #if self.node.item.isvalid():
268 # self.node.parent.select()
270 def sup_valeur_sans_into(self,name=None):
272 Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
274 liste_valeurs = self.Liste_valeurs.get_liste()
276 liste_valeurs.remove(self.selected_valeur)
278 # la valeur sélectionnée n'est pas dans la liste
280 self.Liste_valeurs.put_liste(liste_valeurs)
281 #self.display_valeur('')
282 self.display_valeur(self.selected_valeur)
283 self.selected_valeur = None
285 def display_valeur(self,val=None):
287 Affiche la valeur passée en argument dans l'entry de saisie.
288 Par défaut affiche la valeur du mot-clé simple
291 valeur = self.node.item.getval()
294 self.entry.delete(0,END)
295 if not valeur : return
296 self.entry.insert(0,str(valeur))
299 class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
301 Classe servant à définir le panneau permettant d'afficher et de saisir une
302 liste de valeurs à choisir parmi une liste discrètes de valeurs possibles
304 def makeValeurPage(self,page):
306 Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
309 self.ajout_valeurs = None
310 # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
311 # la liste des choix et la liste des valeurs
312 bulle_aide=self.get_bulle_aide()
313 objet_mc = self.node.item.get_definition()
314 min,max = self.node.item.GetMinMax()
315 l_choix=list(objet_mc.into)
317 l_valeurs = self.node.item.GetListeValeurs()
318 # remplissage du panneau
319 self.frame_valeurs = Frame(page)
320 self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
321 self.frame_boutons_fleches = Frame(page)
322 self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
323 self.frame_choix = Frame(page)
324 self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
325 self.frame_boutons = Frame(page)
326 self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
327 liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
328 ("<Button-3>",self.deselectValeur),
329 ("<Double-Button-1>",self.sup_valeur))
330 liste_commandes_choix = (("<Button-1>",self.selectChoix),
331 ("<Button-3>",self.deselectChoix),
332 ("<Double-Button-1>",self.add_choix))
333 self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
334 titre="Valeur(s) actuelle(s)")
335 self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
336 titre= "Valeurs possibles")
337 bouton_add = Button(self.frame_boutons_fleches,
339 image = images.get_image('arrow_left'),
340 command = self.add_choix)
341 bouton_sup = Button(self.frame_boutons_fleches,
343 image = images.get_image('arrow_right'),
344 command = self.sup_valeur)
345 bouton_accepter = Button(self.frame_boutons,
347 command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
348 bouton_annuler = Button(self.frame_boutons,
350 command = self.annule_modifs_valeur)
351 bouton_add.place(relx=0.3,rely=0.35)
352 bouton_sup.place(relx=0.3,rely=0.65)
353 for but in (bouton_accepter,bouton_annuler):
354 but.pack(side='left',padx=5)
355 self.Liste_valeurs.affiche_liste()
356 self.Liste_choix.affiche_liste()
357 for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
358 fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
359 fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
361 def get_bulle_aide(self):
363 Retourne la bulle d'aide du panneau (affichée par clic droit)
365 return """Un clic sur une valeur des deux listes la sélectionne.
366 - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
367 dans la liste des valeurs que vous voulez affecter au mot-clé simple
368 - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
369 sélectionnée (elle apparaît alors à nouveau comme choix possible
370 dans la liste des choix à droite)
371 - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
372 au mot-clé simple courant
373 - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
374 avant toute modification depuis le dernier 'Valider'"""
376 class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
378 Classe définissant le panel associé aux mots-clés qui demandent
379 à l'utilisateur de donner une liste de valeurs qui ne sont pas
380 à choisir dans une liste discrètes et qui sont de type de base :
381 entier, réel, string,...
383 def makeValeurPage(self,page):
385 Crée la page de saisie d'une liste de valeurs à priori quelconques,
386 cad qui ne sont pas à choisir dans une liste prédéfinie
388 # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
389 # et la liste des valeurs déjà affectées à l'objet courant
390 bulle_aide=self.get_bulle_aide()
391 objet_mc = self.node.item.get_definition()
392 aide = self.get_aide()
393 aide = justify_text(texte=aide)
394 min,max = self.node.item.GetMinMax()
395 l_valeurs = self.node.item.GetListeValeurs()
396 # création des frames globales
397 self.frame1 = Frame(page,relief='groove',bd=2)
398 self.frame2 = Frame(page)
399 self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
400 self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
401 self.frame_right = Frame(self.frame1)
402 self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
403 # création des frames internes
404 self.frame_valeurs = Frame(self.frame1)
405 self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
406 self.frame_boutons_fleches = Frame(self.frame_right)
407 self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
408 self.frame_choix = Frame(self.frame_right)
409 self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
410 self.frame_aide = Frame(self.frame_right)
411 self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
412 self.frame_boutons = Frame(self.frame2)
413 self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.)
414 for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
415 self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
416 fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
417 fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
418 # création des objets dans les frames
419 liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
420 ("<Button-3>",self.deselectValeur),
421 ("<Double-Button-1>",self.sup_valeur_sans_into))
422 self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
423 titre="Valeur(s) actuelle(s)")
424 # Création de l'entry ou de la liste des SD
425 self.label = Label(self.frame_choix,text="Valeur :")
426 self.make_entry(frame = self.frame_choix,command = self.add_valeur_sans_into)
427 self.label.place(relx=0.05,rely=0.5)
\r
428 # Création d'un bouton "Importer ..." sur le panel.
\r
429 bouton_valeurs_fichier = Button(self.frame_choix,
\r
430 text="Importer ...",
\r
431 command=self.select_in_file)
\r
432 bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
\r
433 self.ajout_valeurs = None
434 # boutons Ajouter et Supprimer
435 bouton_add = Button(self.frame_boutons_fleches,
436 image = images.get_image('arrow_left'),
437 command = self.add_valeur_sans_into)
438 bouton_sup = Button(self.frame_boutons_fleches,
439 image = images.get_image('arrow_right'),
440 command = self.sup_valeur_sans_into)
441 bouton_add.place(relx=0.3,rely=0.35)
442 bouton_sup.place(relx=0.3,rely=0.65)
443 # affichage de l'aide
444 self.aide = Label(self.frame_aide,
448 self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
449 self.Liste_valeurs.affiche_liste()
450 # boutons Accepter et Annuler
451 bouton_accepter = Button(self.frame_boutons,
453 command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
454 bouton_annuler = Button(self.frame_boutons,
456 command = self.annule_modifs_valeur)
457 for but in (bouton_accepter,bouton_annuler):
458 but.pack(side='left',padx=5)
460 def select_in_file(self):
\r
461 """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
\r
462 nom_fichier = askopenfilename(title="Choix fichier :")
\r
463 if nom_fichier == "":
\r
466 f = open(nom_fichier, "rb")
\r
467 selection_texte = f.read()
\r
469 self.ajout_valeurs = FenetreDeSelection(self, self.node.item,
\r
470 titre="Sélection de valeurs",
\r
471 texte=selection_texte)
\r
473 showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)
\r
475 def get_bulle_aide(self):
477 Retourne l'aide associée au panneau courant
479 return """Taper dans la boîte de saisie de droite la valeur que
480 vous voulez affecter au mot-clé simple.
481 - Cliquez sur la flèche gauche ou pressez <Return> pour la faire glisser
482 dans la liste des valeurs que vous voulez affecter au mot-clé simple
483 - Un clic sur une valeur de la liste la sélectionne
484 - Un clic sur la flèche droite ou un double-clic retire la valeur
485 sélectionnée de la liste
486 - Cliquez sur 'Valider' pour que la nouvelle valeur désirée soit affectée
488 - Cliquez sur 'Annuler' pour annuler toutes les modifications faites
489 depuis le dernier clic sur 'Valider'"""
493 Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
494 que saisit l'utilisateur
496 mc = self.node.item.get_definition()
497 d_aides = { 'TXM' : 'chaînes de caractères',
502 if not d_aides.has_key(type) : return 'Type de base inconnu'
504 return "Une liste de "+d_aides[type]+" chaînes de caractères est attendue"
506 return "Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
508 def make_entry(self,frame,command):
510 Crée l'entry de saisie de la valeur souhaitée : distingue le
511 cas d'un complexe attendu, d'une autre valeur quelconque
513 if self.node.item.wait_complex():
514 self.typ_cplx=StringVar()
515 self.typ_cplx.set('RI')
516 rb1 = Radiobutton(frame, text='RI',variable=self.typ_cplx,value='RI')
517 rb2 = Radiobutton(frame, text='MP',variable=self.typ_cplx,value='MP')
518 self.entry1 = Pmw.EntryField(frame,validate='real')
519 self.entry2 = Pmw.EntryField(frame,validate='real')
520 rb1.place(relx=0.05,rely = 0.4)
521 rb2.place(relx=0.05,rely = 0.6)
522 self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus)
523 self.entry2.component('entry').bind("<Return>",lambda e,c=command:c())
524 self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
525 self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
528 self.entry = Entry(frame,relief='sunken')
529 self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
530 self.entry.bind("<Return>",lambda e,c=command:c())
533 def get_valeur(self):
535 Retourne la valeur saisie par l'utilisateur dans self.entry
537 return self.entry.get()
539 def erase_valeur(self):
541 Efface la valeur donnée par l'utilisateur dans l'entry
543 self.entry.delete(0,END)
545 class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
547 Classe définissant le panel associé aux mots-clés qui demandent
548 à l'utilisateur de donner une liste de valeurs qui ne sont pas
549 à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD
551 def makeValeurPage(self,page):
553 Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret
554 de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple
556 # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste),
557 # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type
558 bulle_aide=self.get_bulle_aide()
559 self.ajout_valeurs=None
560 objet_mc = self.node.item.get_definition()
561 aide = self.get_aide()
562 aide = justify_text(texte=aide)
563 min,max = self.node.item.GetMinMax()
564 l_valeurs = self.node.item.GetListeValeurs()
565 l_choix=self.node.item.get_sd_avant_du_bon_type()
567 # remplissage du panneau
568 self.frame_valeurs = Frame(page)
569 self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
570 self.frame_boutons_fleches = Frame(page)
571 self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
572 self.frame_choix = Frame(page)
573 self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
574 self.frame_boutons = Frame(page)
575 self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
576 liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
577 ("<Button-3>",self.deselectValeur),
578 ("<Double-Button-1>",self.sup_valeur_sans_into))
579 liste_commandes_choix = (("<Button-1>",self.selectChoix),
580 ("<Button-3>",self.deselectChoix),
581 ("<Double-Button-1>",self.add_valeur_sans_into))
582 self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
583 titre="Valeur(s) actuelle(s)")
584 self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
585 titre= "Valeurs possibles")
586 bouton_add = Button(self.frame_boutons_fleches,
588 image = images.get_image('arrow_left'),
589 command = self.add_valeur_sans_into)
590 bouton_sup = Button(self.frame_boutons_fleches,
592 image = images.get_image('arrow_right'),
593 command = self.sup_valeur_sans_into)
594 bouton_accepter = Button(self.frame_boutons,
596 command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
597 bouton_annuler = Button(self.frame_boutons,
599 command = self.annule_modifs_valeur)
600 bouton_add.place(relx=0.3,rely=0.35)
601 bouton_sup.place(relx=0.3,rely=0.65)
602 for but in (bouton_accepter,bouton_annuler):
603 but.pack(side='left',padx=5)
604 self.Liste_valeurs.affiche_liste()
605 self.Liste_choix.affiche_liste()
606 for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
607 fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
608 fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
610 def get_bulle_aide(self):
612 Retourne la bulle d'aide associée au panneau
614 return """Un clic sur une valeur des deux listes la sélectionne.
615 - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
616 dans la liste des valeurs que vous voulez affecter au mot-clé simple
617 - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
618 sélectionnée (elle apparaît alors à nouveau comme choix possible
619 dans la liste des choix à droite)
620 - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
621 au mot-clé simple courant
622 - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
623 avant toute modification depuis le dernier 'Valider'"""
627 Retourne la phrase d'aide indiquant de quel type doivent être les
628 valeurs que doit entrer l'utilisateur
630 mc = self.node.item.get_definition()
631 type = mc.type[0].__name__
633 for typ in mc.type[1:] :
634 type = type + ' ou '+typ.__name__
636 return "Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
638 return "Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
640 def sup_valeur(self,name=None):
642 Supprime la valeur selectionnée de la liste des valeurs et la rajoute
643 à la liste des choix possibles
645 liste_valeurs = self.Liste_valeurs.get_liste()
646 liste_valeurs.remove(self.selected_valeur)
647 liste_choix = self.node.item.get_definition().into
648 liste_choix = substract_list(liste_choix,liste_valeurs)
649 self.Liste_valeurs.put_liste(liste_valeurs)
650 self.Liste_choix.put_liste(liste_choix)
651 self.selected_valeur = None
653 def erase_valeur(self):
656 def get_valeur(self):
658 Retourne la valeur sélectionnée dans la liste des choix
660 return self.selected_choix
662 def display_valeur(self,val=None):
664 Affiche la valeur passée en argument dans l'entry de saisie.
665 Par défaut affiche la valeur du mot-clé simple
667 # Il n'y a pas d'entry pour ce type de panneau
671 class UNIQUE_Panel(newSIMPPanel):
673 Classe virtuelle servant de classe mère à toutes celles définissant un panneau
674 permettant l'affichage et la saisie d'une valeur unique pour le mot-clé simple
677 def erase_valeur(self):
679 Efface l'entry de saisie
681 self.entry.delete(0,END)
683 def get_valeur(self):
685 Retourne la valeur donnée par l'utilisateur
687 return self.entry.get()
689 def valid_valeur(self):
691 Teste si la valeur fournie par l'utilisateur est une valeur permise :
692 - si oui, l'enregistre
693 - si non, restaure l'ancienne valeur
695 if self.parent.modified == 'n' : self.parent.init_modif()
696 valeur = self.get_valeur()
698 anc_val = self.node.item.get_valeur()
699 test = self.node.item.set_valeur(valeur)
701 mess = "impossible d'évaluer : %s " %`valeur`
702 self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
704 elif self.node.item.isvalid() :
705 self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
706 self.node.parent.select()
708 cr = self.node.item.get_cr()
709 mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
710 self.record_valeur(anc_val,mess=mess)
712 if self.node.item.get_position()=='global':
713 self.node.etape.verif_all()
714 elif self.node.item.get_position()=='global_jdc':
715 self.node.racine.verif_all()
717 self.node.parent.verif()
720 class UNIQUE_INTO_Panel(UNIQUE_Panel):
722 Classe définissant le panel associé aux mots-clés qui demandent
723 à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
726 def makeValeurPage(self,page):
728 Génère la page de saisie d'une seule valeur parmi un ensemble
731 # récupération de la bulle d'aide et de l'objet mc
732 bulle_aide=self.get_bulle_aide()
733 objet_mc = self.node.item.get_definition()
734 # remplissage du panel
735 self.frame_valeur = Frame(page)
736 self.frame_valeur.pack(fill='both',expand=1)
737 self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
738 self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
739 l_choix=list(objet_mc.into)
741 self.label = Label(self.frame_valeur,text='Choisir une valeur :')
742 self.label.pack(side='top')
743 self.frame = Frame(page)
744 self.frame.place(relx=0.33,rely=0.2,relwidth=0.33,relheight=0.6)
745 liste_commandes = (("<Button-1>",self.selectChoix),
746 ("<Button-3>",self.deselectChoix),
747 ("<Double-Button-1>",self.record_valeur))
748 self.Liste_choix = ListeChoix(self,self.frame,l_choix,liste_commandes = liste_commandes,
749 titre="Valeurs possibles")
750 self.Liste_choix.affiche_liste()
752 def get_bulle_aide(self):
754 Retourne la bulle d'aide affectée au panneau courant (affichée par clic droit)
756 return """Double-cliquez sur la valeur désirée
757 pour valoriser le mot-clé simple courant"""
759 class UNIQUE_ASSD_Panel(UNIQUE_Panel):
761 Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
762 d'un type dérivé d'ASSD
764 def makeValeurPage(self,page):
766 Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une
767 SD de type dérivé d'ASSD
769 # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
770 # et de la liste des SD du bon type (constituant la liste des choix)
771 bulle_aide=self.get_bulle_aide()
773 aide= justify_text(texte=aide)
774 liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
775 # Remplissage du panneau
776 self.valeur_choisie = StringVar()
777 self.valeur_choisie.set('')
778 self.frame_valeur = Frame(page)
779 self.frame_valeur.pack(fill='both',expand=1)
780 self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
781 self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
782 self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
785 label_text="Structures de données du type\n requis par l'objet courant :",
787 selectioncommand=self.select_valeur_from_list,
788 dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
789 self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
790 Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
791 #self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
792 Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6)
793 # affichage de la valeur courante
794 self.display_valeur()
796 def get_bulle_aide(self):
798 Retourne l'aide associée au panneau
800 return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
804 Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
806 mc = self.node.item.get_definition()
807 type = mc.type[0].__name__
809 for typ in mc.type[1:] :
810 type = type + ' ou '+typ.__name__
811 return "Un objet de type "+type+" est attendu"
813 def select_valeur_from_list(self):
815 Affecte à valeur choisie la sélection courante dans la liste des choix proposée
817 if len(self.listbox.get()) == 0 : return
818 choix = self.listbox.getcurselection()[0]
819 self.valeur_choisie.set(choix)
821 def choose_valeur_from_list(self,command):
823 Affecte à valeur choisie la sélection courante dans la liste des choix proposée
826 if len(self.listbox.get()) == 0 : return
827 choix = self.listbox.getcurselection()[0]
828 self.valeur_choisie.set(choix)
831 def get_valeur(self):
833 Retourne la valeur donnée par l'utilisateur au MCS
835 return self.valeur_choisie.get()
837 def display_valeur(self):
839 Affiche la valeur de l'objet pointé par self
841 valeur = self.node.item.get_valeur()
842 if valeur == None : return # pas de valeur à afficher ...
843 self.valeur_choisie.set(valeur.nom)
845 def erase_valeur(self):
848 class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
850 Classe servant à définir le panneau correspondant à un mot-clé simple
851 qui attend une valeur unique de type dérivé d'ASSD ou non encore
852 existante (type CO(...) utilisé dans les macros uniquement)
854 def makeValeurPage(self,page):
856 Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une SD de type dérivé
859 # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
860 # et de la liste des SD du bon type (constituant la liste des choix)
861 bulle_aide=self.get_bulle_aide()
863 aide= justify_text(texte=aide)
864 liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
865 # Remplissage du panneau
866 self.frame_valeur = Frame(page)
867 self.frame_valeur.pack(fill='both',expand=1)
868 self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
869 self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
870 # affichage de la liste des SD existantes et du bon type
871 self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
874 label_text="Structures de données du type\n requis par l'objet courant :",
876 selectioncommand=self.select_valeur_from_list,
877 dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
878 self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
879 # affichage du bouton 'Nouveau concept'
880 self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ",
881 items = ('OUI','NON'),menubutton_width=10)
882 self.b_co.configure(command = lambda e,s=self : s.ask_new_concept())
883 self.b_co.place(relx=0.05,rely=0.6,anchor='w')
884 self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :')
885 self.entry_co = Entry(self.frame_valeur)
886 self.entry_co.bind('<Return>',self.valid_nom_concept_co)
887 # affichage du label de la structure de donnée choisie
888 self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :')
889 self.valeur_choisie = StringVar()
890 self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
891 self.aide = Label(self.frame_valeur, text = aide)
892 self.aide.place(relx=0.5,rely=0.85,anchor='n')
893 self.b_co.invoke('NON')
894 # affichage de la valeur courante
895 self.display_valeur()
897 def get_bulle_aide(self):
899 Retourne la bulle d'aide du panneau
901 return """Double-cliquez sur la structure de donnée désirée
902 pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour
903 entrer le nom d'un concept non encore existant"""
905 def valid_nom_concept_co(self,event=None):
907 Lit le nom donné par l'utilisateur au concept de type CO qui doit être
908 la valeur du MCS courant et stocke cette valeur
910 nom_concept = self.entry_co.get()
911 self.node.item.set_valeur_co(nom_concept)
912 if self.node.item.get_position()=='global':
913 self.node.etape.verif_all()
914 elif self.node.item.get_position()=='global_jdc':
915 self.node.racine.verif_all()
917 self.node.parent.verif()
918 if self.node.item.isvalid():
919 self.node.parent.select()
922 def ask_new_concept(self):
924 Crée une entry dans le panneau d'un MCS qui attend un concept OU un CO() afin de
925 permettre à l'utilisateur de donner le nom du nouveau concept
927 new_concept = self.b_co.getcurselection()
928 if new_concept == 'OUI':
929 self.label_co.place(relx=0.05,rely=0.7)
930 self.entry_co.place(relx=0.45,rely=0.7,relwidth=0.25)
931 self.l_resu.place_forget()
932 self.label_valeur.place_forget()
933 self.entry_co.focus()
934 elif new_concept == 'NON':
935 self.label_co.place_forget()
936 self.entry_co.place_forget()
937 self.l_resu.place(relx=0.05,rely=0.7)
938 self.label_valeur.place(relx=0.45,rely=0.7)
940 def display_valeur(self):
942 Affiche la valeur de l'objet pointé par self
944 valeur = self.node.item.get_valeur()
945 if valeur == None : return # pas de valeur à afficher ...
946 # il faut configurer le bouton si la valeur est un objet CO
947 # sinon afficher le nom du concept dans self.valeur_choisie
948 if valeur.__class__.__name__ != 'CO':
949 self.valeur_choisie.set(valeur.nom)
951 self.b_co.invoke('OUI')
952 self.entry_co.insert(0,valeur.nom)
955 class UNIQUE_BASE_Panel(UNIQUE_Panel):
957 Classe servant à définir le panneau associé aux mots-clés simples qui attendent
958 une valeur d'un type de base (entier, réel ou string).
960 def makeValeurPage(self,page):
962 Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
963 de base cad entier, réel, string ou complexe
965 # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
966 # et de la liste des SD du bon type (constituant la liste des choix)
967 bulle_aide=self.get_bulle_aide()
969 aide= justify_text(texte=aide)
970 liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
971 # Remplissage du panneau
972 self.frame_valeur = Frame(page)
973 self.frame_valeur.pack(fill='both',expand=1)
974 self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
975 self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
976 self.label = Label(self.frame_valeur,text='Valeur :')
977 self.label.place(relx=0.1,rely=0.5)
978 self.entry = Entry(self.frame_valeur,relief='sunken')
979 self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
980 self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
982 # aide associée au panneau
983 self.aide = Label(self.frame_valeur, text = aide)
984 self.aide.place(relx=0.5,rely=0.7,anchor='n')
985 # affichage de la valeur du MCS
986 self.display_valeur()
990 Retourne la phrase d'aide indiquant de quel type doit être la valeur
991 du mot-clé simple fournie par l'utilisateur
993 mc = self.node.item.get_definition()
994 d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
995 'R' : "Un réel est attendu",
996 'I' : "Un entier est attendu"}
998 return d_aides.get(type,"Type de base inconnu")
1000 def get_bulle_aide(self):
1002 Retourne la bulle d'aide associée au panneau et affichée par clic droit
1004 return """Saisissez la valeur que vous voulez affecter au mot-clé simple
1005 dans la zone de saisie et pressez <Return>"""
1007 def display_valeur(self):
1009 Affiche la valeur de l'objet pointé par self
1011 valeur = self.node.item.get_valeur()
1012 if valeur == None : return # pas de valeur à afficher ...
1013 self.entry.delete(0,END)
1014 self.entry.insert(0,valeur)
1016 class UNIQUE_COMP_Panel(UNIQUE_Panel):
1018 Classe servant à définir le panneau associé aux mots-clés simples
1019 qui attendent une valeur de type complexe
1021 def makeValeurPage(self,page):
1023 Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
1024 de base cad entier, réel, string ou complexe
1026 # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur
1027 bulle_aide=self.get_bulle_aide()
1028 aide=self.get_aide()
1029 aide= justify_text(texte=aide)
1030 # Remplissage du panneau
1031 self.frame_valeur = Frame(page)
1032 self.frame_valeur.pack(fill='both',expand=1)
1033 self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
1034 self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
1035 self.label = Label(self.frame_valeur,text='Valeur :')
1036 self.label.place(relx=0.1,rely=0.5)
1037 self.typ_cplx=StringVar()
1038 self.typ_cplx.set('RI')
1039 rb1 = Radiobutton(self.frame_valeur, text='RI',variable=self.typ_cplx,value='RI')
1040 rb2 = Radiobutton(self.frame_valeur, text='MP',variable=self.typ_cplx,value='MP')
1041 self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real')
1042 self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real')
1043 rb1.place(relx=0.05,rely = 0.4)
1044 rb2.place(relx=0.05,rely = 0.6)
1045 self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus())
1046 self.entry2.component('entry').bind("<Return>",lambda e,c=self.valid_valeur:c())
1047 self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
1048 self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
1050 self.aide = Label(self.frame_valeur, text = aide)
1051 self.aide.place(relx=0.5,rely=0.7,anchor='n')
1053 def get_bulle_aide(self):
1055 Retourne la bulle d'aide du panneau
1057 return """-Choisissez votre format de saisie du complexe :
1058 \t 'RI' = parties réelle et imaginaire
1059 \t 'MP' = module/phase (en degrés)
1060 - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus"""
1064 Retourne la phrase d'aide décrivant le type de la valeur que peut prendre
1065 le mot-clé simple courant
1067 return 'Un complexe est attendu'
1069 def get_valeur(self):
1071 Retourne le complexe saisi par l'utilisateur
1074 l.append(self.typ_cplx.get())
1075 l.append(string.atof(self.entry1.get()))
1076 l.append(string.atof(self.entry2.get()))
1079 def erase_valeur(self):
1081 Efface les entries de saisie
1083 self.typ_cplx = 'RI'
1084 self.entry1.delete(0,END)
1085 self.entry2.delete(0,END)
1087 class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
1088 panel = newSIMPPanel
1094 def affect_panel(self):
1096 Cette méthode attribue le panel à l'objet pointé par self en fonction de la
1097 nature de la valeur demandée pour cet objet
1099 if self.wait_shell():
1100 # l'objet attend un shell
1101 self.panel = SHELLPanel
1102 elif self.wait_into():
1103 # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
1104 min,max = self.GetMinMax()
1105 if max != 1 and ((min != 0 and min != max) or (min == 0)):
1106 # l'objet attend une liste de valeurs
1107 self.panel = PLUSIEURS_INTO_Panel
1109 # l'objet n'attend qu'une seule valeur
1110 self.panel = UNIQUE_INTO_Panel
1112 # l'objet prend une ou des valeurs à priori quelconques
1113 min,max = self.GetMinMax()
1115 # on attend une liste de valeurs mais de quel type ?
1116 if self.wait_assd():
1117 # on attend une liste de SD
1118 self.panel = PLUSIEURS_ASSD_Panel
1120 # on attend une liste de valeurs de types debase (entiers, réels,...)
1121 self.panel = PLUSIEURS_BASE_Panel
1123 # on n'attend qu'une seule valeur mais de quel type ?
1125 # on attend une SD ou un objet de la classe CO (qui n'existe pas encore)
1126 self.panel = UNIQUE_SDCO_Panel
1127 elif self.wait_assd():
1129 self.panel = UNIQUE_ASSD_Panel
1131 # on attend une valeur d'un type de base (entier,réel,...)
1132 if self.wait_complex():
1133 # on attend un complexe
1134 self.panel = UNIQUE_COMP_Panel
1136 # on attend un entier, un réel ou une string
1137 self.panel = UNIQUE_BASE_Panel
1140 def SetText(self, text):
1143 self.object.setval(value)
1147 def GetIconName(self):
1149 return "ast-green-ball"
1150 elif self.object.isoblig():
1151 return "ast-red-ball"
1153 return "ast-yel-ball"
1158 Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
1161 return self.object.GetText()
1165 Méthode booléenne qui retourne 1 si l'objet pointé par self
1166 attend un objet de type ASSD qui n'existe pas encore (type CO()),
1169 return self.object.wait_co()
1171 def wait_geom(self):
1173 Méthode booléenne qui retourne 1 si l'objet pointé par self
1174 attend un objet GEOM, 0 sinon
1176 return self.object.wait_geom()
1178 def wait_complex(self):
1179 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
1180 attend un complexe, 0 sinon """
1181 if 'C' in self.object.definition.type:
1186 def wait_reel(self):
1187 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
1188 attend un réel, 0 sinon """
1189 if 'R' in self.object.definition.type:
1194 def wait_shell(self):
1195 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
1196 attend un shell, 0 sinon """
1197 if 'shell' in self.object.definition.type:
1202 def wait_into(self):
1203 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
1204 prend ses valeurs dans un ensemble discret (into), 0 sinon """
1205 if self.object.definition.into != None :
1210 def wait_assd(self):
1211 """Méthode booléenne qui retourne 1 si l'objet pointé par self
1212 attend un objet de type ASSD ou dérivé, 0 sinon """
1213 return self.object.wait_assd()
1216 return self.object.getval()
1218 def GetMinMax(self):
1219 """ Retourne les valeurs min et max de la définition de object """
1220 return self.object.get_min_max()
1222 def GetMultiplicite(self):
\r
1224 Retourne la multiplicité des valeurs affectées à l'objet
\r
1225 représenté par l'item. Pour le moment retourne invariablement 1.
\r
1229 def GetType(self):
\r
1230 """ Retourne le type de valeur attendu par l'objet représenté par l'item.
\r
1232 return self.object.get_type()
\r
1234 def GetIntervalle(self):
\r
1235 """ Retourne le domaine de valeur attendu par l'objet représenté par l'item.
\r
1237 return self.object.getintervalle()
\r
1239 def IsInIntervalle(self,valeur):
\r
1240 """ Retourne 1 si la valeur est dans l'intervalle permis par
\r
1241 l'objet représenté par l'item.
\r
1243 return self.object.isinintervalle(valeur)
\r
1245 def set_valeur_co(self,nom_co):
1247 Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
1249 self.object.set_valeur_co(nom_co)
1251 def get_sd_avant_du_bon_type(self):
1253 Retourne la liste des noms des SD présentes avant l'étape qui contient
1254 le MCS pointé par self et du type requis par ce MCS
1256 return self.object.jdc.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
1258 def GetListeValeurs(self) :
1259 """ Retourne la liste des valeurs de object """
1260 return self.object.get_liste_valeurs()
1266 return self.object.isvalid()
1268 def eval_valeur(self,valeur):
1269 """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur
1270 de l'objet pointé par self :
1271 - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
1272 - retourne 'valeur' (chaîne de caractères) sinon """
1273 return self.object.eval_valeur(valeur)
1276 treeitem = SIMPTreeItem
1277 objet = Accas.MCSIMP