Salome HOME
PN
[tools/eficas.git] / Editeur / panelsSalome.py
1 # -*- coding: utf-8 -*-
2 print "Import de panelsSalome"
3
4 from Tkinter import *
5 from widgets import ListeChoix
6 from widgets import showerror
7
8 from fonctionpanel      import FONCTION_Panel
9 from shellpanel         import SHELLPanel
10 from plusieursintopanel import PLUSIEURS_INTO_Panel
11 from plusieursassdpanel import PLUSIEURS_ASSD_Panel
12 from plusieursbasepanel import PLUSIEURS_BASE_Panel
13 from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel
14 from uniquesdcopanel    import UNIQUE_SDCO_Panel
15 from uniqueassdpanel    import UNIQUE_ASSD_Panel
16 from uniqueintopanel    import UNIQUE_INTO_Panel
17 from uniquecomppanel    import UNIQUE_COMP_Panel
18 from uniquebasepanel    import UNIQUE_BASE_Panel
19 from uniqueassdpanel    import UNIQUE_ASSD_Panel_Reel
20
21 from Noyau.N_CR import justify_text
22
23 import traceback
24 #import SalomePyQt
25 import salome           # CS_pbruno à poubelliser
26 import images
27 #import SMESH_utils
28 #sgQt=SalomePyQt.SalomePyQt() 
29
30
31
32 # 2 types de commandes vont etre particularisees dans Salome
33 #
34 # - un cas general : 
35 # Toutes les commandes possedant GROUP_NO ou GROUP_MA
36 # seront surchargees d office
37 # pour cela on va utiliser le dictionnaire dict_classes_salome
38 # qui va permettre de changer la classe de la commande
39 # ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel
40 # la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel
41 # (pour cela voir composimp)
42
43 # des commandes "autres" ne pouvant pas etre identifiées par leur nom 
44 # il suffit de creer dans la classe SALOME de la commande
45 # une fonction portant son nom 
46 # Exemple de particularisation d un panel :
47 # Supposons que l on veuille particulariser la commande
48 #       - LIRE_MAILLAGE_UNITE 
49 # le panel initial a pour classe UNIQUE_BASE_Panel
50 # il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel
51 # une fonction  SALOME_LIRE_MAILLAGE_UNITE
52 # la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel
53 # on peut surcharger les methodes nécessaires (affichage par exemple)  
54
55
56 class SALOME_SHELLPanel (SHELLPanel):
57         ""
58
59 class SALOME_FONCTION_Panel (FONCTION_Panel):
60         ""
61
62 class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel):
63         ""
64
65 class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel):
66         ""
67
68 class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel):
69         ""
70
71 class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel):
72         ""
73
74 class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel):
75         ""
76
77 class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel):
78         ""
79
80 class SALOME_UNIQUE_ASSD_Panel_Reel (UNIQUE_ASSD_Panel_Reel):
81         ""
82
83 # ------------------------------------------------------------------------------#
84 # classe SALOME_PLUSIEURS_BASE_Panel
85 #
86 # Commandes modifiées  :  
87 #       - AFFE_CHAR_MECA_DDL_IMPO_GROUP_NO
88 # Methodes surchargées :  
89 #       - makeValeurPage(self,page)
90 #
91 # ------------------------------------------------------------------------------#
92
93 class SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_OR_UNELISTE_Panel):
94       ""        
95
96
97
98 class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel):
99
100   def __init__(self,parent,panneau,node):
101       PLUSIEURS_BASE_Panel.__init__( self, parent, panneau, node )
102       self.selected_valeur = None
103       
104   def add_valeur_plusieurs_base(self,name=None):
105       try: 
106         valeur,validite,commentaire=self.get_valeur()
107         #print 'add_valeur_plusieurs_base', name
108         #print 'valeur = %s, validite = %s,commentaire = %s'%( valeur,validite,commentaire )            
109         if not valeur: # sélection dans salome        
110             #print 'CS_pbruno selection SALOME'
111             strSelection = ''
112             
113             selection, msg = self.parent.appli.selectGroupFromSalome()
114             
115             #print 'CS_pbruno selection SALOME selection ->',selection
116             #print 'CS_pbruno selection SALOME msg ->',msg
117             
118             if selection:
119                 for oneSelection in selection:
120                     strSelection +=str( oneSelection )
121                     strSelection +=','
122                             
123                 strSelection = strSelection.rstrip(',')
124                 #print 'CS_pbruno selection SALOME strSelection ->',strSelection
125                 
126                 self.display_valeur( strSelection )                
127                     
128         PLUSIEURS_BASE_Panel.add_valeur_plusieurs_base( self, name )
129         if msg:
130             self.parent.appli.affiche_infos(msg)
131         self.erase_valeur()
132       except:
133         print ' erreur  add_valeur_plusieurs_base' #CS_pbruno : afficher boite de dialogue ici ?          
134         
135   def makeValeurPage(self,page):
136       """
137       Crée la page de saisie d'une liste de valeurs à priori quelconques,
138       cad qui ne sont  pas à choisir dans une liste prédéfinie
139       """      
140       PLUSIEURS_BASE_Panel.makeValeurPage(self,page)
141       self.c = Button( self.frame_choix, text='Visualiser',command=self.displayInSalomeGeom )      
142       self.c.place( relx=0.3, rely=0.0,relwidth=0.55)
143       
144       #self.c.place(relx=0.08,rely=0.55,relwidth=0.35)
145       #self.c.place(relx=0.08,rely=0.55 )      
146       
147   def displayInSalomeGeom( self ):
148       if self.selected_valeur:        
149         ok, msgError = self.parent.appli.displayShape( self.selected_valeur )
150         if not ok:
151             self.parent.appli.affiche_infos(msgError)
152       
153       
154 """      
155 class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel):      
156
157   def convertit_group_no_from_salome(self,liste_in):
158       newr=[]
159       #try:
160       if ( 1 == 1 ) :
161           for entree in liste_in :
162                travail=[]
163                travail.append(entree)
164                entryname_list=SMESH_utils.entryToName(salome.myStudy,travail)
165                entreeName=entryname_list[0]
166                if dict_geom_numgroupe.has_key(entreeName):
167                    r=dict_geom_numgroupe[entreeName]
168                else:
169                    r=SMESH_utils.getAsterGroupNo(salome.myStudy,travail)
170                    dict_geom_numgroupe[entreeName]=r
171                for i in r :
172                    newr.append(i)
173       #except:
174       else :
175            print "pas de groupe de noeuds associé"
176            showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de noeuds")
177       return newr
178
179   def convertit_group_maille_from_salome(self,liste_in):
180       newr=[]
181       #try:
182       if [ 1 == 1 ]:
183           print liste_in
184           for entree in liste_in :
185                travail=[]
186                travail.append(entree)
187                entryname_list=SMESH_utils.entryToName(salome.myStudy,travail)
188                entreeName=entryname_list[0]
189                if dict_geom_numgroupe.has_key(entreeName):
190                    r=dict_geom_numgroupe[entreeName]
191                else:
192                    r=SMESH_utils.getAsterGroupMa(salome.myStudy,travail)
193                    dict_geom_numgroupe[entreeName]=r
194                if r != None :
195                    for i in r :
196                       newr.append(i)
197       #except:
198       else :
199            print "pas de groupe de maille associé"
200            showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de maille")
201       return newr
202
203   def convertit_entrees_en_valeurs(self,entrychaine):
204       if SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel.__dict__.has_key(self.clef_fonction):
205            print 'CS_pbruno AAAAAAAAAAAAA'
206            valeur=apply(SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel.__dict__[self.clef_fonction],(self,entrychaine))           
207       else :
208            if (self.clef_fonction.find("GROUP_NO") != -1) and (self.clef_fonction.find("GROUP_MA") != -1) :
209               print 'CS_pbruno BBBBBBBBBBBBBBBBBBB'
210               if (self.clef_fonction.find("GROUP_NO") < self.clef_fonction.find("GROUP_MA")) :
211                 print 'CS_pbruno CCCCCCCCCCCCCCCCCCCCCCCCCC'
212                 valeur=self.convertit_group_maille_from_salome(entrychaine)
213               else :
214                 print 'CS_pbruno DDDDDDDDDDDDDDDDDDDDDDDDD'
215                 valeur=self.convertit_group_no_from_salome(entrychaine)  
216            elif self.clef_fonction.find("GROUP_NO") != -1 :
217                print 'CS_pbruno EEEEEEEEEEEEEEEEEEEEEEEEE'
218                valeur=self.convertit_group_no_from_salome(entrychaine)
219            else :
220                print 'CS_pbruno FFFFFFFFFFFFFFFFFFFFFFFF'
221                if self.clef_fonction.find("GROUP_MA") != -1 :
222                    print 'CS_pbruno GGGGGGGGGGGGGGGGGGGGGGGGGGG'
223                    valeur=self.convertit_group_maille_from_salome(entrychaine)
224                else :
225                     print 'CS_pbruno HHHHHHHHHHHHHHHHHHHHHH'
226                     print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
227                     print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster"
228                     print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
229                     valeur=[]
230       print "VALEUR", valeur
231       return valeur
232
233   def sup_valeur_from_salome(self,name=None):
234       #""
235       Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
236       #""
237       liste_valeurs = self.Liste_valeurs.get_liste()
238       liste_valeurs_salome=self.Liste_valeurs_salome.get_liste()
239       entrychaine=salome.sg.getAllSelected()
240
241       try:
242           valeur = self.convertit_entrees_en_valeurs(entrychaine)
243           for i in valeur :
244             if i in liste_valeurs :
245                 liste_valeurs.remove(i)
246                 print "enleve" , i
247       except:
248           # la valeur sélectionnée n'est pas dans la liste
249           pass
250
251       entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
252       self.entrygroupe.delete(0,END)
253       self.sortie.delete(0,END)
254       for entryname in entryname_list:
255           try:
256              liste_valeurs_salome.remove(entryname)
257           except:
258              print "la valeur ", entryname, "n est pas dans la liste"
259           entryname=entryname + " "
260           self.sortie.insert(0,entryname)
261       self.selected_valeur = None
262       self.Liste_valeurs.put_liste(liste_valeurs)
263       self.Liste_valeurs_salome.put_liste(liste_valeurs_salome)
264       self.recalcule()
265
266   def visu_in_salome(self):
267       liste_valeurs = self.Liste_valeurs.get_liste()
268       entryname_list=SMESH_utils.VisuGroupe(salome.myStudy,liste_valeurs)
269
270   def visu3D_in_salome(self):
271       liste_valeurs = self.Liste_valeurs.get_liste()
272       entryname_list=SMESH_utils.VisuGroupe(salome.myStudy,liste_valeurs)
273
274   def recalcule(self):
275       liste_valeurs_salome=self.Liste_valeurs_salome.get_liste()
276       groups={}
277       liste_valeurs = self.Liste_valeurs.get_liste()
278       for valeur in liste_valeurs_salome:
279           r=dict_geom_numgroupe[valeur]
280           for i in r :
281               if i not in liste_valeurs :
282                   liste_valeurs.append(i)
283       self.Liste_valeurs.put_liste(liste_valeurs)
284       
285   
286   def add_valeur_from_salome(self,name=None):       
287        entrychaine=salome.sg.getAllSelected()
288        self.sortie.delete(0,END)
289        self.entrygroupe.delete(0,END)
290        if entrychaine != '':
291           entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
292           touteslesvaleurs = self.convertit_entrees_en_valeurs(entrychaine)
293          
294           valeur=[]
295           liste_valeurs  = self.Liste_valeurs.get_liste()
296           for i in touteslesvaleurs:
297               if i not in liste_valeurs:
298                  valeur.append(i)
299               
300           if valeur==[]:
301              entryname_list=[]
302
303           liste_valeurs_salome = self.Liste_valeurs_salome.get_liste()
304           for entryname in entryname_list:
305               if entryname not in liste_valeurs_salome: 
306                  liste_valeurs_salome.append(entryname)
307               entryname=entryname + " "
308               self.entrygroupe.insert(0,entryname)
309           self.Liste_valeurs_salome.put_liste(liste_valeurs_salome)
310
311           if self.node.item.wait_reel():
312              print "wait_reel()"
313              valeur = self.traite_reel(valeur)
314           if self.node.item.wait_geom():
315              print "wait_geom()"
316              val,test1 = valeur,1
317           else:
318              print "else wait"
319              val,test1 = self.node.item.object.eval_valeur(valeur)
320
321           if test1 :
322              test2 = self.node.item.object.verif_type(val)
323              if test2 :
324                  liste_valeurs = self.Liste_valeurs.get_liste()
325                  if len(liste_valeurs) >= max :
326                      self.parent.appli.affiche_infos("La liste a déjà atteint le nombre maximum d'éléments, ajout refusé")
327                      self.erase_valeur()
328                      return
329                  if type(val) == type([]):
330                    for groupe in val:
331                      liste_valeurs.append(groupe)
332                  else:
333                    liste_valeurs.append(val)
334                  self.Liste_valeurs.put_liste(liste_valeurs)
335                  self.parent.appli.affiche_infos("Nouvelle valeur acceptée")
336              else:
337                  self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
338           else:
339              print "impossible d'évaluer %s" %val
340              self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
341
342                 
343   def makeValeurPage(self,page):
344       #""
345       Crée la page de saisie d'une liste de valeurs à priori quelconques,
346       cad qui ne sont  pas à choisir dans une liste prédéfinie
347       #""
348       
349       # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
350       # et la liste des valeurs déjà affectées à l'objet courant
351       bulle_aide=self.get_bulle_aide()
352       objet_mc = self.node.item.get_definition()
353       aide = self.get_aide()
354       aide = justify_text(texte=aide)
355       min,max = self.node.item.GetMinMax()
356       self.clef_fonction=  self.node.item.clef_fonction
357       l_valeurs = self.node.item.GetListeValeurs()
358
359       self.frame1 = Frame(page,relief='groove',bd=2)
360       self.frame2 = Frame(page)
361       self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
362       self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
363       self.frame_right = Frame(self.frame1)
364       self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
365
366       # création des frames internes
367       self.frame_valeurs = Frame(self.frame1)
368       self.frame_valeurs.place(relx=0.0,rely=0.0,relwidth=0.35,relheight=0.95)
369
370       self.frame_choix = Frame(self.frame_right)
371       self.frame_choix.place(relx=0.0,rely=0.0,relwidth=1,relheight=0.9)
372       self.frame_valeurs_salome = Frame(self.frame_right)
373       self.frame_valeurs_salome.place(relx=0.02,rely=0.7,relwidth=0.9,relheight=0.3)
374
375       self.frame_boutons = Frame(self.frame2)
376       self.frame_boutons.place(relx=0.1,rely=0.,relwidth=0.5,relheight=1.)
377       self.frame_aide = Frame(self.frame2)
378       self.frame_aide.place(relx=0.6,rely=0.,relwidth=0.5,relheight=1)
379
380       for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
381                  self.frame_choix,self.frame_aide,self.frame_boutons):
382             fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
383             fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
384
385       # création des objets dans les frames
386       liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
387                                  ("<Button-3>",self.deselectValeur),
388                                  ("<Double-Button-1>",self.sup_valeur_sans_into))
389       self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,
390                                       liste_commandes = liste_commandes_valeurs,
391                                       titre="Valeur(s) actuelle(s)")
392
393     # PN : pour ajouter les validators
394       self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base,y=0.55)
395
396       bouton_valeurs_fichier = Button(self.frame_choix,
397                                       text="Importer ...",
398                                       command=self.select_in_file)
399       bouton_valeurs_fichier.place(relx=0.28,rely=0.65,relwidth=0.6)
400
401       self.ajout_valeurs = None
402       self.b = Button(self.frame_choix,text='ajout select.',command=self.add_valeur_from_salome)
403
404       self.b.place(relx=0.03,rely=0.05,relwidth=0.35)
405       self.entrygroupe = Entry(self.frame_choix,relief='sunken')
406       self.entrygroupe.place(relx=0.4,rely=0.05,relwidth=0.6)
407
408       self.a = Button(self.frame_choix,text='enlev. select.',command=self.sup_valeur_from_salome)
409       self.a.place(relx=0.03,rely=0.2,relwidth=0.35)
410       self.sortie = Entry(self.frame_choix,relief='sunken')
411       self.sortie.place(relx=0.4,rely=0.2,relwidth=0.6)
412       self.c = Button(self.frame_choix,text='Visualiser',command=self.visu_in_salome)
413       self.c.place(relx=0.03,rely=0.35,relwidth=0.35)
414
415       self.genea =self.node.item.get_genealogie()
416       print self.genea
417       if "AFFE_CARA_ELEM" in self.genea :
418          self.d=Button(self.frame_choix,text='Visu 3D',command=self.visu3D_in_salome)
419          self.d.place(relx=0.47,rely=0.35,relwidth=0.35)
420
421       l_salome_valeurs=self.node.item.get_salome_valeurs()
422       self.Liste_valeurs_salome=ListeChoix(self,self.frame_valeurs_salome,l_salome_valeurs,
423                                         liste_commandes = liste_commandes_valeurs,
424                                         titre="Valeur(s) Salome actuelle(s) ")
425       self.Liste_valeurs_salome.affiche_liste()
426
427
428       # boutons Ajouter et Supprimer
429       bouton_add = Button(self.frame_choix,
430                           image = images.get_image('arrow_left'),
431                           command = self.add_valeur_plusieurs_base)
432       bouton_sup = Button(self.frame_choix,
433                           image = images.get_image('arrow_right'),
434                           command = self.sup_valeur_sans_into)
435       bouton_add.place(relx=0.08,rely=0.55)
436       bouton_sup.place(relx=0.08,rely=0.65)
437
438       # affichage de l'aide
439       self.frame_aide.update()
440       self.aide = Label(self.frame_aide, text = aide,
441                         justify='center', anchor='center',
442                         wraplength=int(self.frame_aide.winfo_width()*0.8))
443       self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
444       self.Liste_valeurs.affiche_liste()
445
446       # boutons Accepter et Annuler
447       bouton_accepter = Button(self.frame_boutons,
448                                text='Valider',
449                                command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
450       bouton_annuler = Button(self.frame_boutons,
451                               text = 'Annuler',
452                               command = self.annule_modifs_valeur)
453       for but in (bouton_accepter,bouton_annuler):
454           but.pack(side='left',padx=5)
455
456 """          
457
458
459 # ------------------------------------------------------------------------------#
460 # classe SALOME_UNIQUE_BASE_Panel
461 #
462 # Commandes modifiées  :  
463 #       - LIRE_MAILLAGE_UNITE 
464 # Methodes surchargées :  
465 #       - makeValeurPage(self,page)
466 #
467 # ------------------------------------------------------------------------------#
468
469 class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel):
470
471 # ce dictionnaire va servir lors de la sortie d efficas
472 # a creer le fichier qui sera integre au config.txt
473 # pour relier une unite logique et un nom de fichier
474
475   dict_fichier_unite={}
476
477
478   def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N(self):
479       entrychaine=salome.sg.getAllSelected()
480       if entrychaine != '':
481           self.entry2.delete(0,END)
482           try:
483               SO = salome.myStudy.FindObjectID(entrychaine[0])
484           except:
485               boo = 0
486               SO = None
487
488           FileName=''
489           if SO != None:
490               myBuilder = salome.myStudy.NewBuilder()
491               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
492               if boo:
493                  val=FileAttr.Value()
494                  if (val !="FICHIERMED" and val != "FICHIER_RESU_MED"):
495                      boo=0
496                      showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
497                  else:
498                      boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
499               if boo :
500                 FileName=FileAttr.Value()
501               else:
502                  showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
503           if FileName != '' :
504               self.entry2.insert(0,FileName)
505               self.entry.delete(0,END)
506               self.entry.insert(0,FileName)
507               self.valid_valeur()
508
509
510   def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self):
511       EntryName=''
512       entrychaine=salome.sg.getAllSelected()
513       if entrychaine != '':
514           self.entry2.delete(0,END)
515           try:
516               SO = salome.myStudy.FindObjectID(entrychaine[0])
517           except:
518               boo = 0
519               SO = None
520
521           if SO is not None:
522              myBuilder = salome.myStudy.NewBuilder()
523              ok, AtName = myBuilder.FindAttribute(SO,"AttributeName")
524              if ok:
525                 EntryName=AtName.Value()
526
527       if EntryName != '':
528           self.entry2.insert(0,EntryName)
529           self.entry.delete(0,END)
530           self.entry.insert(0,EntryName)
531           self.valid_valeur()
532
533   def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_NP1(self):
534       self.SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N()
535
536
537 #  def SALOME_LIRE_MAILLAGE_UNITE(self):
538
539 #      unite=self.node.item.get_valeur()
540 #      entrychaine=salome.sg.getAllSelected()
541 #      if entrychaine != '':
542 #         self.entry2.delete(0,END)
543
544 #          try:
545 #              SO = salome.myStudy.FindObjectID(entrychaine[0])
546 #          except:
547 #              boo = 0
548 #              SO = None
549
550 #          if SO != None:
551 #             myBuilder = salome.myStudy.NewBuilder()
552 #              boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeComment")
553 #
554 #          FileName=''
555 #          if SO != None:
556 #              myBuilder = salome.myStudy.NewBuilder()
557 #              boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
558 #              if boo:
559 #                 boo=0
560 #                 val=FileAttr.Value()
561 #                 if (val !="FICHIERMED"):
562 #                     showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
563 #                 else:
564 #                     boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
565 #          if boo :
566 #              FileName=FileAttr.Value()
567 #          else:
568 #              showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
569
570 #          print "FileName = " , FileName
571 #          if FileName != '' :
572 #              self.entry2.insert(0,FileName)
573 #              typefic='D'
574 #              SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite]=typefic+FileName
575 #          else :
576 #              print "il faut afficher une Fenetre d impossibilit\xe9"
577 #              showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
578
579   def redistribue_selon_simp(self):
580       genea = self.node.item.get_genealogie()
581       commande="SALOME"
582       for i in range(0,len( genea )) :
583         commande=commande+"_"+ genea[i]
584       (SALOME_UNIQUE_BASE_Panel.__dict__[commande])(self)
585
586
587   def makeValeurPage(self,page):
588       """
589       Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
590       de base cad entier, réel, string ou complexe
591       """
592       # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
593       # et de la liste des SD du bon type (constituant la liste des choix)
594       bulle_aide=self.get_bulle_aide()
595       aide=self.get_aide()
596       aide= justify_text(texte=aide)
597       liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
598       # Remplissage du panneau
599       self.frame_valeur = Frame(page)
600       self.frame_valeur.pack(fill='both',expand=1)
601       self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
602       self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
603       self.label = Label(self.frame_valeur,text='Valeur :')
604       self.label.place(relx=0.1,rely=0.5)
605       self.entry = Entry(self.frame_valeur,relief='sunken')
606       self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
607       self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
608       self.entry.bind("<KP_Enter>",lambda e,c=self.valid_valeur:c())
609
610       # PN : Ajout d'un bouton pour selectionner  à partir de Salome  
611       self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp)
612       self.b.place(relx=0.05,rely=0.1)
613       unite=self.node.item.get_valeur()
614       self.entry2 = Entry(self.frame_valeur,relief='sunken')
615       self.entry2.place(relx=0.3,rely=0.1)
616       self.entry2.configure(width = 250)
617
618       if SALOME_UNIQUE_BASE_Panel.dict_fichier_unite.has_key(unite):
619          associe=SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite][1:]
620          self.entry2.delete(0,END)
621          if associe != "" :
622              self.entry2.insert(0,associe)
623       else:
624          self.entry2.delete(0,END)
625
626       # aide associée au panneau
627       self.frame_valeur.update()
628       self.aide = Label(self.frame_valeur,
629                         text = aide,
630                         wraplength=int(self.frame_valeur.winfo_width()*0.8),
631                         justify='center')
632       self.aide.place(relx=0.5,rely=0.7,anchor='n')
633       # affichage de la valeur du MCS
634       self.display_valeur()
635
636 #---------------------------------------------------------------------------------------
637 # Correspondances entre les classes eficas et les classes salome_eficas 
638 #______________________________________________________________________________________
639 dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel, 
640                           FONCTION_Panel       : SALOME_FONCTION_Panel,
641                           PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel,
642                           PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel,
643                           PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel,
644                           PLUSIEURS_BASE_OR_UNELISTE_Panel : SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel,
645                           UNIQUE_INTO_Panel :  SALOME_UNIQUE_INTO_Panel,
646                           UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel,
647                           UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel,
648                           UNIQUE_ASSD_Panel_Reel : SALOME_UNIQUE_ASSD_Panel_Reel,
649                           UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel,
650                           UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel}
651
652 dict_geom_numgroupe = { }
653 dict_geom_numface = { }