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
112 child = self.append_brother(objet_a_copier,retour='oui')
115 def doPaste_MCF(self,objet_a_copier):
117 Réalise la copie de l'objet passé en argument (objet_a_copier)
118 Il s'agit forcément d'un mot clé facteur
120 child = self.append_child(objet_a_copier,pos='first',retour='oui')
124 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
125 """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
126 Accas. Elle leur permet d'etre affichés comme des noeuds
127 d'un arbre graphique.
128 Cette classe a entre autres deux attributs importants :
129 - _object qui est un pointeur vers l'objet du noyau
130 - object qui pointe vers l'objet auquel sont délégués les
131 appels de méthode et les accès aux attributs
132 Dans le cas d'une ETAPE, _object et object pointent vers le
138 def IsExpandable(self):
141 def GetIconName(self):
143 Retourne le nom de l'icône à afficher dans l'arbre
144 Ce nom dépend de la validité de l'objet
146 if not self.object.isactif():
147 return "ast-white-square"
148 elif self.object.isvalid():
149 return "ast-green-square"
151 return "ast-red-square"
153 def GetLabelText(self):
154 """ Retourne 3 valeurs :
155 - le texte à afficher dans le noeud représentant l'item
156 - la fonte dans laquelle afficher ce texte
157 - la couleur du texte
159 if self.object.isactif():
160 # None --> fonte et couleur par défaut
161 return self.labeltext,None,None
163 return self.labeltext,fontes.standard_italique,None
165 def get_objet(self,name) :
166 for v in self.object.mc_liste:
167 if v.nom == name : return v
170 def get_type_sd_prod(self):
172 Retourne le nom du type du concept résultat de l'étape
174 sd_prod=self.object.get_type_produit()
176 return sd_prod.__name__
180 def additem(self,name,pos):
181 if isinstance(name,Objecttreeitem.ObjectTreeItem) :
182 mcent = self.object.addentite(name.getObject(),pos)
184 mcent = self.object.addentite(name,pos)
187 # on ne peut ajouter l'élément de nom name
189 def setfunction(value, object=mcent):
191 item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
194 def suppitem(self,item) :
195 # item : item du MOCLE de l'ETAPE à supprimer
196 # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
197 itemobject=item.getObject()
198 if itemobject.isoblig() :
199 self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
201 if self.object.suppentite(itemobject):
202 message = "Mot-clé " + itemobject.nom + " supprimé"
203 self.appli.affiche_infos(message)
206 self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
211 return self.object.get_sdname()
216 keys=self.object.mc_dict.keys()
219 def GetSubList(self):
221 for obj in self.object.mc_liste:
222 def setfunction(value, object=obj):
224 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
229 return self.object.isvalid()
231 def iscopiable(self):
233 Retourne 1 si l'objet est copiable, 0 sinon
237 def verif_condition_bloc(self):
238 return self.object.verif_condition_bloc()
240 def nomme_sd(self,nom):
241 """ Lance la méthode de nommage de la SD """
242 test,mess= self.object.nomme_sd(nom)
243 if test:self.object.parent.reset_context()
246 def is_reentrant(self):
247 return self.object.is_reentrant()
249 def get_noms_sd_oper_reentrant(self):
250 return self.object.get_noms_sd_oper_reentrant()
252 def get_objet_commentarise(self):
254 Cette méthode retourne un objet commentarisé
255 représentatif de self.object
257 import generator,string,Accas
258 # Format de fichier utilisé
259 format=self.appli.format_fichier.get()
260 g=generator.plugins[format]()
261 texte_commande = g.gener(self.object,format='beautifie')
262 # Il faut enlever la première ligne vide de texte_commande que
263 # rajoute le generator
264 rebut,texte_commande = string.split(texte_commande,'\n',1)
265 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
266 # enregistré dans le jdc
267 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
268 parent=self.object.parent)
269 commande_comment.niveau = self.object.niveau
270 commande_comment.jdc = commande_comment.parent = self.object.jdc
271 return commande_comment
273 def replace_child(self,old_item,new_item):
275 Remplace old_item.getObject() par new_item.getObject() dans
276 les fils de self.object
278 old_itemobject=old_item.getObject()
279 index = self.object.mc_liste.index(old_itemobject)
280 self.object.init_modif()
281 self.object.mc_liste.remove(old_itemobject)
282 self.object.mc_liste.insert(index,new_item.getObject())
283 self.object.fin_modif()
286 treeitem = EtapeTreeItem