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