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.
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.
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.
20 # ======================================================================
28 class OPERPanel(panels.OngletPanel):
31 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
32 nb.pack(fill = 'both', expand = 1)
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"),
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()
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)
58 self.makeConceptPage(page)
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,
68 label_text="Structure(s) de données à enrichir par l'opérateur courant :",
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])
80 def select_valeur_from_list(self):
82 choix = self.listbox.getcurselection()[0]
83 self.valeur_choisie.set(choix)
88 def choose_valeur_from_list(self,command):
90 choix = self.listbox.getcurselection()[0]
91 self.valeur_choisie.set(choix)
97 class Node(treewidget.Node):
98 def doPaste(self,node_selected):
100 Déclenche la copie de l'objet item avec pour cible
101 l'objet passé en argument : node_selected
103 objet_a_copier = self.item.get_copie_objet()
104 child=node_selected.doPaste_Commande(objet_a_copier)
107 def doPaste_Commande(self,objet_a_copier):
109 Réalise la copie de l'objet passé en argument qui est nécessairement
113 #child = parent.item.append_child(objet_a_copier,self.item.getObject())
114 child = self.append_brother(objet_a_copier,retour='oui')
115 #if child is None:return 0
118 def doPaste_MCF(self,objet_a_copier):
120 Réalise la copie de l'objet passé en argument (objet_a_copier)
121 Il s'agit forcément d'un mot clé facteur
123 child = self.append_child(objet_a_copier,pos='first',retour='oui')
127 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
128 """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
129 Accas. Elle leur permet d'etre affichés comme des noeuds
130 d'un arbre graphique.
131 Cette classe a entre autres deux attributs importants :
132 - _object qui est un pointeur vers l'objet du noyau
133 - object qui pointe vers l'objet auquel sont délégués les
134 appels de méthode et les accès aux attributs
135 Dans le cas d'une ETAPE, _object et object pointent vers le
141 def IsExpandable(self):
144 def GetIconName(self):
146 Retourne le nom de l'icône à afficher dans l'arbre
147 Ce nom dépend de la validité de l'objet
149 if not self.object.isactif():
150 return "ast-white-square"
151 elif self.object.isvalid():
152 return "ast-green-square"
154 return "ast-red-square"
156 def GetLabelText(self):
157 """ Retourne 3 valeurs :
158 - le texte à afficher dans le noeud représentant l'item
159 - la fonte dans laquelle afficher ce texte
160 - la couleur du texte
162 if self.object.isactif():
163 # None --> fonte et couleur par défaut
164 return self.labeltext,None,None
166 return self.labeltext,fontes.standard_italique,None
168 def get_objet(self,name) :
169 for v in self.object.mc_liste:
170 if v.nom == name : return v
173 def get_type_sd_prod(self):
175 Retourne le nom du type du concept résultat de l'étape
177 sd_prod=self.object.get_type_produit()
179 return sd_prod.__name__
183 def additem(self,name,pos):
184 #print "compooper.additem",name,pos
185 mcent = self._object.addentite(name,pos)
188 def suppitem(self,item) :
189 # item : item du MOCLE de l'ETAPE à supprimer
190 # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
191 itemobject=item.getObject()
192 if itemobject.isoblig() :
193 self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
195 if self.object.suppentite(itemobject):
196 message = "Mot-clé " + itemobject.nom + " supprimé"
197 self.appli.affiche_infos(message)
200 self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
205 return self.object.get_sdname()
210 keys=self.object.mc_dict.keys()
213 def GetSubList(self):
215 Reactualise la liste des items fils stockes dans self.sublist
218 liste=self.object.mc_liste
222 sublist=[None]*len(liste)
223 # suppression des items lies aux objets disparus
224 for item in self.sublist:
225 old_obj=item.getObject()
227 pos=liste.index(old_obj)
230 pass # objets supprimes ignores
232 # ajout des items lies aux nouveaux objets
235 if sublist[pos] is None:
236 # nouvel objet : on cree un nouvel item
237 def setfunction(value, object=obj):
239 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
246 def GetSubList_BAK(self):
248 liste=self.object.mc_liste
253 isublist=iter(self.sublist)
258 for item in isublist:
259 old_obj=item.getObject()
260 if old_obj in liste:break
263 if obj is old_obj:break
264 # nouvel objet : on cree un nouvel item
265 def setfunction(value, object=obj):
267 it = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
270 if old_obj is None and obj is None:break
278 return self.object.isvalid()
280 def iscopiable(self):
282 Retourne 1 si l'objet est copiable, 0 sinon
286 def update(self,item):
287 if item.sd and item.sd.nom:
288 self.nomme_sd(item.sd.nom)
290 def nomme_sd(self,nom):
291 """ Lance la méthode de nommage de la SD """
292 test,mess= self.object.nomme_sd(nom)
293 if test:self.object.parent.reset_context()
296 def is_reentrant(self):
297 return self.object.is_reentrant()
299 def get_noms_sd_oper_reentrant(self):
300 return self.object.get_noms_sd_oper_reentrant()
302 def get_objet_commentarise(self):
304 Cette méthode retourne un objet commentarisé
305 représentatif de self.object
307 import generator,string,Accas
308 # Format de fichier utilisé
309 format=self.appli.format_fichier.get()
310 g=generator.plugins[format]()
311 texte_commande = g.gener(self.object,format='beautifie')
312 # Il faut enlever la première ligne vide de texte_commande que
313 # rajoute le generator
314 rebut,texte_commande = string.split(texte_commande,'\n',1)
315 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
316 # enregistré dans le jdc
317 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
318 parent=self.object.parent)
319 commande_comment.niveau = self.object.niveau
320 commande_comment.jdc = commande_comment.parent = self.object.jdc
322 pos=self.object.parent.etapes.index(self.object)
323 self.object.parent.suppentite(self.object)
324 self.object.parent.addentite(commande_comment,pos)
326 return commande_comment
328 def additem_BAK(self,name,pos):
329 mcent=self.addentite(name,pos)
333 # on ne peut ajouter l'élément de nom name
335 def setfunction(value, object=mcent):
337 item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
340 def GetSubList_BAK(self):
342 for obj in self.object.mc_liste:
343 def setfunction(value, object=obj):
345 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
349 def verif_condition_bloc_BAK(self):
350 return self.object.verif_condition_bloc()
352 def replace_child(self,old_item,new_item):
354 Remplace old_item.getObject() par new_item.getObject() dans
355 les fils de self.object
358 old_itemobject=old_item.getObject()
359 index = self.object.mc_liste.index(old_itemobject)
360 self.object.init_modif()
361 self.object.mc_liste.remove(old_itemobject)
362 self.object.mc_liste.insert(index,new_item.getObject())
363 self.object.fin_modif()
366 treeitem = EtapeTreeItem