]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
pour tenir compte de LASSD
authoreficas <>
Fri, 7 Oct 2005 07:52:16 +0000 (07:52 +0000)
committereficas <>
Fri, 7 Oct 2005 07:52:16 +0000 (07:52 +0000)
Accas/A_ASSD.py
Accas/__init__.py
Editeur/composimp.py
Editeur/eficas_test.py
Editeur/plusieursbasepanel.py

index f3898a2aa1b7a8225903b354d0cb8370763e4ec9..e9a76ccf53e45c7ec53865244263c24be5ea4cbe 100644 (file)
 # ======================================================================
 
 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
 
index 21636df6796a429378039f04bf8955aca6ac4a1d..c2995f429014625faf3699397098da29eff06e44 100644 (file)
@@ -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
index 5a0260c13a8943ee462216e79e56adaf4d925c99..611f4de6431c1d940c086a3e2bc28fb45ab5bc1b 100644 (file)
@@ -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 :
index 4a2d7a51aee961b93cbaedabc4a010912053233b..1e794f03fb6870013827d07f2d3a42b644091637 100644 (file)
@@ -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
index 8ad982c811e9343c460d754b330a683dacd4f03d..4133c67c7f7940f98d4748632de3430edf65f4a6 100644 (file)
@@ -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("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-          fram.bind("<ButtonRelease-3>",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("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      #    fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
 
       # création des objets dans les frames
-      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
-                                 ("<Button-3>",self.deselectValeur),
-                                 ("<Double-Button-1>",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 = (("<Button-1>",self.selectValeur),
+      #                           ("<Button-3>",self.deselectValeur),
+      #                           ("<Double-Button-1>",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("<Return>",lambda e,s=self:s.entry2.component('entry').focus)
-          self.entry2.component('entry').bind("<Return>",lambda e,c=command:c())
-          self.entry1.component('entry').bind("<KP_Enter>",lambda e,s=self:s.entry2.component('entry').focus)
-          self.entry2.component('entry').bind("<KP_Enter>",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("<Return>",lambda e,c=command:c())
-          self.entry.bind("<KP_Enter>",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("<Return>",lambda e,s=self:s.entry2.component('entry').focus)
+      #    self.entry2.component('entry').bind("<Return>",lambda e,c=command:c())
+      #    self.entry1.component('entry').bind("<KP_Enter>",lambda e,s=self:s.entry2.component('entry').focus)
+      #    self.entry2.component('entry').bind("<KP_Enter>",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("<Return>",lambda e,c=command:c())
+      #    self.entry.bind("<KP_Enter>",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 = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",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("<Button-3>",lambda e,s=self,a=bulle_aide: s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",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("<Return>",lambda e,c=command:c())
+      self.entry.bind("<KP_Enter>",lambda e,c=command:c())
+      self.entry.focus()