]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/compooper.py
Salome HOME
CCAR: Modified Files:
[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       test,mess= self.object.nomme_sd(nom)
193       if test:self.object.parent.reset_context()
194       return test,mess
195
196   def is_reentrant(self):
197       return self.object.is_reentrant()
198     
199   def get_noms_sd_oper_reentrant(self):
200       return self.object.get_noms_sd_oper_reentrant()
201
202   def get_objet_commentarise(self):
203       """
204           Cette méthode retourne un objet commentarisé
205           représentatif de self.object
206       """
207       import generator,string,Accas
208       # Format de fichier utilisé
209       format=self.appli.format_fichier.get()
210       g=generator.plugins[format]()
211       texte_commande = g.gener(self.object,format='beautifie')
212       # Il faut enlever la première ligne vide de texte_commande que 
213       # rajoute le generator
214       rebut,texte_commande = string.split(texte_commande,'\n',1)
215       # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
216       # enregistré dans le jdc
217       commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
218                                              parent=self.object.parent)
219       commande_comment.niveau = self.object.niveau
220       commande_comment.jdc = commande_comment.parent = self.object.jdc
221       return commande_comment
222
223 import Accas
224 treeitem = EtapeTreeItem
225 objet = Accas.ETAPE    
226