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 # commande obligatoirement reentrante
57 self.makeConceptPage_reentrant(page)
59 # commande non reentrante ou facultativement reentrante
60 self.makeConceptPage(page)
62 def makeConceptPage_reentrant(self,page):
63 """ Crée la page de saisie du nom de concept pour un opérateur reentrant
64 cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
65 type est compatible avec celui que retourne l'opérateur """
66 liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
67 self.listbox = Pmw.ScrolledListBox(page,
70 label_text="Structure(s) de données à enrichir par l'opérateur courant :",
72 selectioncommand=self.select_valeur_from_list,
73 dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
74 self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
75 Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
76 self.valeur_choisie = StringVar()
77 self.label_valeur = Label(page,textvariable=self.valeur_choisie)
78 self.label_valeur.place(relx=0.45,rely=0.6)
79 if len(liste_noms_sd) == 1 :
80 self.valeur_choisie.set(liste_noms_sd[0])
82 def select_valeur_from_list(self):
84 choix = self.listbox.getcurselection()[0]
85 self.valeur_choisie.set(choix)
90 def choose_valeur_from_list(self,command):
92 choix = self.listbox.getcurselection()[0]
93 self.valeur_choisie.set(choix)
99 class Node(treewidget.Node):
100 def doPaste(self,node_selected):
102 Déclenche la copie de l'objet item avec pour cible
103 l'objet passé en argument : node_selected
105 objet_a_copier = self.item.get_copie_objet()
106 child=node_selected.doPaste_Commande(objet_a_copier)
109 def doPaste_Commande(self,objet_a_copier):
111 Réalise la copie de l'objet passé en argument qui est nécessairement
115 #child = parent.item.append_child(objet_a_copier,self.item.getObject())
116 child = self.append_brother(objet_a_copier,retour='oui')
117 #if child is None:return 0
120 def doPaste_MCF(self,objet_a_copier):
122 Réalise la copie de l'objet passé en argument (objet_a_copier)
123 Il s'agit forcément d'un mot clé facteur
125 child = self.append_child(objet_a_copier,pos='first',retour='oui')
129 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
130 """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
131 Accas. Elle leur permet d'etre affichés comme des noeuds
132 d'un arbre graphique.
133 Cette classe a entre autres deux attributs importants :
134 - _object qui est un pointeur vers l'objet du noyau
135 - object qui pointe vers l'objet auquel sont délégués les
136 appels de méthode et les accès aux attributs
137 Dans le cas d'une ETAPE, _object et object pointent vers le
143 def IsExpandable(self):
146 def GetIconName(self):
148 Retourne le nom de l'icône à afficher dans l'arbre
149 Ce nom dépend de la validité de l'objet
151 if not self.object.isactif():
152 return "ast-white-square"
153 elif self.object.isvalid():
154 return "ast-green-square"
156 return "ast-red-square"
158 def GetLabelText(self):
159 """ Retourne 3 valeurs :
160 - le texte à afficher dans le noeud représentant l'item
161 - la fonte dans laquelle afficher ce texte
162 - la couleur du texte
164 if self.object.isactif():
165 # None --> fonte et couleur par défaut
166 return self.labeltext,None,None
168 return self.labeltext,fontes.standard_italique,None
170 def get_objet(self,name) :
171 for v in self.object.mc_liste:
172 if v.nom == name : return v
175 def get_type_sd_prod(self):
177 Retourne le nom du type du concept résultat de l'étape
179 sd_prod=self.object.get_type_produit()
181 return sd_prod.__name__
185 def additem(self,name,pos):
186 #print "compooper.additem",name,pos
187 mcent = self._object.addentite(name,pos)
190 def suppitem(self,item) :
191 # item : item du MOCLE de l'ETAPE à supprimer
192 # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
193 itemobject=item.getObject()
194 if itemobject.isoblig() :
195 self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
197 if self.object.suppentite(itemobject):
198 message = "Mot-clé " + itemobject.nom + " supprimé"
199 self.appli.affiche_infos(message)
202 self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
207 return self.object.get_sdname()
212 keys=self.object.mc_dict.keys()
215 def GetSubList(self):
217 Reactualise la liste des items fils stockes dans self.sublist
220 liste=self.object.mc_liste
224 sublist=[None]*len(liste)
225 # suppression des items lies aux objets disparus
226 for item in self.sublist:
227 old_obj=item.getObject()
229 pos=liste.index(old_obj)
232 pass # objets supprimes ignores
234 # ajout des items lies aux nouveaux objets
237 if sublist[pos] is None:
238 # nouvel objet : on cree un nouvel item
239 def setfunction(value, object=obj):
241 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
249 return self.object.isvalid()
251 def iscopiable(self):
253 Retourne 1 si l'objet est copiable, 0 sinon
257 def update(self,item):
258 if item.sd and item.sd.nom:
259 self.nomme_sd(item.sd.nom)
261 def nomme_sd(self,nom):
262 """ Lance la méthode de nommage de la SD """
264 if self.object.sd != None :
265 oldnom=self.object.sd.nom
266 test,mess= self.object.nomme_sd(nom)
267 if test:self.object.parent.reset_context()
268 if (test and self.appli.dict_reels.has_key(oldnom) ):
269 self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
272 def is_reentrant(self):
273 return self.object.is_reentrant()
275 def get_noms_sd_oper_reentrant(self):
276 return self.object.get_noms_sd_oper_reentrant()
278 def get_objet_commentarise(self):
280 Cette méthode retourne un objet commentarisé
281 représentatif de self.object
283 import generator,string,Accas
284 # Format de fichier utilisé
285 format=self.appli.format_fichier.get()
286 g=generator.plugins[format]()
287 texte_commande = g.gener(self.object,format='beautifie')
288 # Il faut enlever la première ligne vide de texte_commande que
289 # rajoute le generator
290 rebut,texte_commande = string.split(texte_commande,'\n',1)
291 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
292 # enregistré dans le jdc
293 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
294 parent=self.object.parent)
295 commande_comment.niveau = self.object.niveau
296 commande_comment.jdc = commande_comment.parent = self.object.jdc
298 pos=self.object.parent.etapes.index(self.object)
299 self.object.parent.suppentite(self.object)
300 self.object.parent.addentite(commande_comment,pos)
302 return commande_comment
305 treeitem = EtapeTreeItem