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