Salome HOME
PN : Choix automatique du concept lorsqu'un seul choix est possible.
[tools/eficas.git] / Editeur / compooper.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
19 # ======================================================================
20 from Tkinter import *
21 import Pmw
22 import traceback
23 import Objecttreeitem
24 import panels
25 import fontes
26
27 class OPERPanel(panels.OngletPanel):
28
29   def init(self):
30     nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
31     nb.pack(fill = 'both', expand = 1)
32     self.nb=nb
33     nb.add('Mocles', tab_text='Nouveau mot-clé')
34     nb.add('Concept', tab_text='Nommer concept')
35     nb.add('Commande', tab_text='Nouvelle Commande')
36     nb.add('Commentaire',tab_text='Paramètre/Commentaire')
37     panneau=Pmw.PanedWidget(nb.page("Mocles"),
38                             orient='horizontal')
39     panneau.add('left',min=0.4,max=0.6,size=0.5)
40     panneau.add('right',min=0.4,max=0.6,size=0.5)
41     panneau.pack(expand=1,fill='both')
42     self.makeCommandePage(nb.page("Commande"))
43     self.makeConceptPage_oper(nb.page("Concept"))
44     self.makeMoclesPage(panneau.pane('left'))
45     self.makeReglesPage(panneau.pane('right'))
46     #self.makeCommentairePage(nb.page("Commentaire"))
47     self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
48     nb.tab('Mocles').focus_set()
49     nb.setnaturalsize()
50     self.affiche()
51
52   def makeConceptPage_oper(self,page):
53       """ Crée la page de saisie du nom du concept """
54       if self.node.item.is_reentrant():
55           self.makeConceptPage_reentrant(page)
56       else:
57           self.makeConceptPage(page)
58
59   def makeConceptPage_reentrant(self,page):
60       """ Crée la page de saisie du nom de concept pour un opérateur reentrant
61       cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
62       type est compatible avec celui que retourne l'opérateur """
63       liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
64       self.listbox = Pmw.ScrolledListBox(page,
65                                          items=liste_noms_sd,
66                                          labelpos='n',
67                                          label_text="Structure(s) de données à enrichir par l'opérateur courant :",
68                                          listbox_height = 6,
69                                          selectioncommand=self.select_valeur_from_list,
70                                          dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
71       self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
72       Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
73       self.valeur_choisie = StringVar()
74       self.label_valeur = Label(page,textvariable=self.valeur_choisie)
75       self.label_valeur.place(relx=0.45,rely=0.6)
76       if len(liste_noms_sd) == 1 :
77           self.valeur_choisie.set(liste_noms_sd[0])
78
79   def select_valeur_from_list(self):
80       try:
81           choix = self.listbox.getcurselection()[0]
82           self.valeur_choisie.set(choix)
83       except:
84           traceback.print_exc()
85           
86
87   def choose_valeur_from_list(self,command):
88       try:
89           choix = self.listbox.getcurselection()[0]
90           self.valeur_choisie.set(choix)
91           apply(command,(),{})
92       except:
93           traceback.print_exc()
94
95 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
96   panel = OPERPanel
97   
98   def IsExpandable(self):
99       return 1
100
101   def GetIconName(self):
102       """
103       Retourne le nom de l'icône à afficher dans l'arbre
104       Ce nom dépend de la validité de l'objet
105       """
106       if self.object.isactif():
107         if self.object.isvalid():
108           return "ast-green-square"
109         else:
110           return "ast-red-square"
111       else:
112         return "ast-white-square"
113
114   def GetLabelText(self):
115       """ Retourne 3 valeurs :
116       - le texte à afficher dans le noeud représentant l'item
117       - la fonte dans laquelle afficher ce texte
118       - la couleur du texte
119       """
120       if self.object.isactif():
121         # None --> fonte et couleur par défaut
122         return self.labeltext,None,None
123       else:
124         return self.labeltext,fontes.standard_italique,None
125       
126   def get_objet(self,name) :
127       for v in self.object.mc_liste:
128           if v.nom == name : return v
129       return None
130       
131   def get_type_sd_prod(self):
132       """
133          Retourne le nom du type du concept résultat de l'étape
134       """
135       sd_prod=self.object.get_type_produit()
136       if sd_prod:
137          return sd_prod.__name__
138       else:
139          return ""
140
141   def additem(self,name,pos):
142       if isinstance(name,Objecttreeitem.ObjectTreeItem) :
143           mcent = self.object.addentite(name.object,pos)
144       else :
145           mcent = self.object.addentite(name,pos)
146       self.expandable=1
147       if mcent == 0 :
148           # on ne peut ajouter l'élément de nom name
149           return 0
150       def setfunction(value, object=mcent):
151           object.setval(value)
152       item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
153       return item
154
155   def suppitem(self,item) :
156       # item : item du MOCLE de l'ETAPE à supprimer
157       # item.object = MCSIMP, MCFACT, MCBLOC ou MCList 
158       if item.object.isoblig() :
159           self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
160           return 0
161       else :
162           self.object.suppentite(item.object)
163           message = "Mot-clé " + item.object.nom + " supprimé"
164           self.appli.affiche_infos(message)
165           return 1
166
167   def GetText(self):
168       try:
169           return self.object.get_sdname()
170       except:
171           return ''
172
173   def keys(self):
174       keys=self.object.mc_dict.keys()
175       return keys
176
177   def GetSubList(self):
178       sublist=[]
179       for obj in self.object.mc_liste:
180         def setfunction(value, object=obj):
181           object.setval(value)
182         item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
183         sublist.append(item)
184       return sublist
185
186   def isvalid(self):
187       return self.object.isvalid()
188
189   def iscopiable(self):
190       """
191       Retourne 1 si l'objet est copiable, 0 sinon
192       """
193       return 1
194
195   def isCommande(self):
196       """
197       Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
198       """
199       return 1
200       
201   def verif_condition_bloc(self):
202       return self.object.verif_condition_bloc()
203
204   def nomme_sd(self,nom):
205       """ Lance la méthode de nommage de la SD """
206       test,mess= self.object.nomme_sd(nom)
207       if test:self.object.parent.reset_context()
208       return test,mess
209
210   def is_reentrant(self):
211       return self.object.is_reentrant()
212     
213   def get_noms_sd_oper_reentrant(self):
214       return self.object.get_noms_sd_oper_reentrant()
215
216   def get_objet_commentarise(self):
217       """
218           Cette méthode retourne un objet commentarisé
219           représentatif de self.object
220       """
221       import generator,string,Accas
222       # Format de fichier utilisé
223       format=self.appli.format_fichier.get()
224       g=generator.plugins[format]()
225       texte_commande = g.gener(self.object,format='beautifie')
226       # Il faut enlever la première ligne vide de texte_commande que 
227       # rajoute le generator
228       rebut,texte_commande = string.split(texte_commande,'\n',1)
229       # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
230       # enregistré dans le jdc
231       commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
232                                              parent=self.object.parent)
233       commande_comment.niveau = self.object.niveau
234       commande_comment.jdc = commande_comment.parent = self.object.jdc
235       return commande_comment
236
237   def replace_child(self,old_item,new_item):
238      """
239      Remplace old_item.object par new_item.object dans les fils de self.object
240      """
241      index = self.object.mc_liste.index(old_item.object)
242      self.object.init_modif()
243      self.object.mc_liste.remove(old_item.object)
244      self.object.mc_liste.insert(index,new_item.object)
245      self.object.fin_modif()
246      
247 import Accas
248 treeitem = EtapeTreeItem
249 objet = Accas.ETAPE    
250