Salome HOME
Version Aster 6.3.14
[tools/eficas.git] / Editeur / compooper.py
1 #@ MODIF compooper Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
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 # ======================================================================
8 from Tkinter import *
9 import Pmw
10 import Objecttreeitem
11 import panels
12 import fontes
13
14 class OPERPanel(panels.OngletPanel):
15
16   def init(self):
17     nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
18     nb.pack(fill = 'both', expand = 1)
19     self.nb=nb
20     nb.add('Mocles', tab_text='Nouveau mot-clé')
21     nb.add('Concept', tab_text='Nommer concept')
22     nb.add('Commande', tab_text='Nouvelle Commande')
23     nb.add('Commentaire',tab_text='Paramètre/Commentaire')
24     panneau=Pmw.PanedWidget(nb.page("Mocles"),
25                             orient='horizontal')
26     panneau.add('left',min=0.4,max=0.6,size=0.5)
27     panneau.add('right',min=0.4,max=0.6,size=0.5)
28     panneau.pack(expand=1,fill='both')
29     self.makeCommandePage(nb.page("Commande"))
30     self.makeConceptPage_oper(nb.page("Concept"))
31     self.makeMoclesPage(panneau.pane('left'))
32     self.makeReglesPage(panneau.pane('right'))
33     #self.makeCommentairePage(nb.page("Commentaire"))
34     self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
35     nb.tab('Mocles').focus_set()
36     nb.setnaturalsize()
37     self.affiche()
38
39   def makeConceptPage_oper(self,page):
40       """ Crée la page de saisie du nom du concept """
41       if self.node.item.is_reentrant():
42           self.makeConceptPage_reentrant(page)
43       else:
44           self.makeConceptPage(page)
45
46   def makeConceptPage_reentrant(self,page):
47       """ Crée la page de saisie du nom de concept pour un opérateur reentrant
48       cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
49       type est compatible avec celui que retourne l'opérateur """
50       liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
51       self.listbox = Pmw.ScrolledListBox(page,
52                                          items=liste_noms_sd,
53                                          labelpos='n',
54                                          label_text="Structure(s) de données à enrichir par l'opérateur courant :",
55                                          listbox_height = 6,
56                                          selectioncommand=self.select_valeur_from_list,
57                                          dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
58       self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
59       Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
60       self.valeur_choisie = StringVar()
61       self.label_valeur = Label(page,textvariable=self.valeur_choisie)
62       self.label_valeur.place(relx=0.45,rely=0.6)
63       if len(liste_noms_sd) == 1 :
64           self.valeur_choisie.set(liste_noms_sd[0])
65
66   def select_valeur_from_list(self):
67       try:
68           choix = self.listbox.getcurselection()[0]
69           self.valeur_choisie.set(choix)
70       except:
71           pass
72
73   def choose_valeur_from_list(self,command):
74       try:
75           choix = self.listbox.getcurselection()[0]
76           self.valeur_choisie.set(choix)
77           apply(command,(),{})
78       except:
79           pass
80
81 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
82   panel = OPERPanel
83   
84   def IsExpandable(self):
85       return 1
86
87   def GetIconName(self):
88       """
89       Retourne le nom de l'icône à afficher dans l'arbre
90       Ce nom dépend de la validité de l'objet
91       """
92       if self.object.isactif():
93         if self.object.isvalid():
94           return "ast-green-square"
95         else:
96           return "ast-red-square"
97       else:
98         return "ast-white-square"
99
100   def GetLabelText(self):
101       """ Retourne 3 valeurs :
102       - le texte à afficher dans le noeud représentant l'item
103       - la fonte dans laquelle afficher ce texte
104       - la couleur du texte
105       """
106       if self.object.isactif():
107         # None --> fonte et couleur par défaut
108         return self.labeltext,None,None
109       else:
110         return self.labeltext,fontes.standard_italique,None
111       
112   def get_objet(self,name) :
113       for v in self.object.mc_liste:
114           if v.nom == name : return v
115       return None
116       
117   def get_type_sd_prod(self):
118       """
119          Retourne le nom du type du concept résultat de l'étape
120       """
121       sd_prod=self.object.get_type_produit()
122       if sd_prod:
123          return sd_prod.__name__
124       else:
125          return ""
126
127   def additem(self,name,pos):
128       if isinstance(name,Objecttreeitem.ObjectTreeItem) :
129           mcent = self.object.addentite(name.object,pos)
130       else :
131           mcent = self.object.addentite(name,pos)
132       self.expandable=1
133       if mcent == 0 :
134           # on ne peut ajouter l'élément de nom name
135           return 0
136       def setfunction(value, object=mcent):
137           object.setval(value)
138       item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
139       return item
140
141   def suppitem(self,item) :
142       # item : item du MOCLE de l'ETAPE à supprimer
143       # item.object = MCSIMP, MCFACT, MCBLOC ou MCList 
144       if item.object.isoblig() :
145           self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
146           return 0
147       else :
148           self.object.suppentite(item.object)
149           message = "Mot-clé " + item.object.nom + " supprimé"
150           self.appli.affiche_infos(message)
151           return 1
152
153   def GetText(self):
154       try:
155           return self.object.get_sdname()
156       except:
157           return ''
158
159   def keys(self):
160       keys=self.object.mc_dict.keys()
161       return keys
162
163   def GetSubList(self):
164       sublist=[]
165       for obj in self.object.mc_liste:
166         def setfunction(value, object=obj):
167           object.setval(value)
168         item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
169         sublist.append(item)
170       return sublist
171
172   def isvalid(self):
173       return self.object.isvalid()
174
175   def iscopiable(self):
176       """
177       Retourne 1 si l'objet est copiable, 0 sinon
178       """
179       return 1
180
181   def isCommande(self):
182       """
183       Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
184       """
185       return 1
186       
187   def verif_condition_bloc(self):
188       return self.object.verif_condition_bloc()
189
190   def nomme_sd(self,nom):
191       """ Lance la méthode de nommage de la SD """
192       return self.object.nomme_sd(nom)
193
194   def is_reentrant(self):
195       return self.object.is_reentrant()
196     
197   def get_noms_sd_oper_reentrant(self):
198       return self.object.get_noms_sd_oper_reentrant()
199
200   def get_objet_commentarise(self):
201       """
202           Cette méthode retourne un objet commentarisé
203           représentatif de self.object
204       """
205       import generator,string,Accas
206       # Format de fichier utilisé
207       format=self.appli.format_fichier.get()
208       g=generator.plugins[format]()
209       texte_commande = g.gener(self.object,format='beautifie')
210       # Il faut enlever la première ligne vide de texte_commande que 
211       # rajoute le generator
212       rebut,texte_commande = string.split(texte_commande,'\n',1)
213       # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
214       # enregistré dans le jdc
215       commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
216                                              parent=self.object.parent)
217       commande_comment.niveau = self.object.niveau
218       commande_comment.jdc = commande_comment.parent = self.object.jdc
219       return commande_comment
220
221 import Accas
222 treeitem = EtapeTreeItem
223 objet = Accas.ETAPE    
224