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.60,size=0.50)
41 panneau.add('right',min=0.4,max=0.60,size=0.50)
42 panneau.pack(expand=1,fill='both')
43 panneau.setnaturalsize()
44 self.makeCommandePage(nb.page("Commande"))
45 self.makeConceptPage_oper(nb.page("Concept"))
46 self.makeMoclesPage(panneau.pane('left'))
47 self.makeReglesPage(panneau.pane('right'))
48 #self.makeCommentairePage(nb.page("Commentaire"))
49 self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
50 nb.tab('Mocles').focus_set()
51 self.nb.setnaturalsize()
54 def makeConceptPage_oper(self,page):
55 """ Crée la page de saisie du nom du concept """
56 if self.node.item.is_reentrant():
57 # commande obligatoirement reentrante
58 self.makeConceptPage_reentrant(page)
60 # commande non reentrante ou facultativement reentrante
61 self.makeConceptPage(page)
63 def makeConceptPage_reentrant(self,page):
64 """ Crée la page de saisie du nom de concept pour un opérateur reentrant
65 cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
66 type est compatible avec celui que retourne l'opérateur """
67 liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
68 self.listbox = Pmw.ScrolledListBox(page,
71 label_text="Structure(s) de données à enrichir par l'opérateur courant :",
73 selectioncommand=self.select_valeur_from_list,
74 dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
75 self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
76 Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
77 self.valeur_choisie = StringVar()
78 self.label_valeur = Label(page,textvariable=self.valeur_choisie)
79 self.label_valeur.place(relx=0.45,rely=0.6)
80 if len(liste_noms_sd) == 1 :
81 self.valeur_choisie.set(liste_noms_sd[0])
83 def select_valeur_from_list(self):
85 choix = self.listbox.getcurselection()[0]
86 self.valeur_choisie.set(choix)
91 def choose_valeur_from_list(self,command):
93 choix = self.listbox.getcurselection()[0]
94 self.valeur_choisie.set(choix)
100 class Node(treewidget.Node):
101 def doPaste(self,node_selected):
103 Déclenche la copie de l'objet item avec pour cible
104 l'objet passé en argument : node_selected
106 objet_a_copier = self.item.get_copie_objet()
107 child=node_selected.doPaste_Commande(objet_a_copier)
110 def doPaste_Commande(self,objet_a_copier):
112 Réalise la copie de l'objet passé en argument qui est nécessairement
116 #child = parent.item.append_child(objet_a_copier,self.item.getObject())
117 child = self.append_brother(objet_a_copier,retour='oui')
118 #if child is None:return 0
121 def doPaste_MCF(self,objet_a_copier):
123 Réalise la copie de l'objet passé en argument (objet_a_copier)
124 Il s'agit forcément d'un mot clé facteur
126 child = self.append_child(objet_a_copier,pos='first',retour='oui')
130 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
131 """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
132 Accas. Elle leur permet d'etre affichés comme des noeuds
133 d'un arbre graphique.
134 Cette classe a entre autres deux attributs importants :
135 - _object qui est un pointeur vers l'objet du noyau
136 - object qui pointe vers l'objet auquel sont délégués les
137 appels de méthode et les accès aux attributs
138 Dans le cas d'une ETAPE, _object et object pointent vers le
144 def IsExpandable(self):
147 def GetIconName(self):
149 Retourne le nom de l'icône à afficher dans l'arbre
150 Ce nom dépend de la validité de l'objet
152 if not self.object.isactif():
153 return "ast-white-square"
154 elif self.object.isvalid():
155 return "ast-green-square"
157 return "ast-red-square"
159 def GetLabelText(self):
160 """ Retourne 3 valeurs :
161 - le texte à afficher dans le noeud représentant l'item
162 - la fonte dans laquelle afficher ce texte
163 - la couleur du texte
165 if self.object.isactif():
166 # None --> fonte et couleur par défaut
167 return self.labeltext,None,None
169 return self.labeltext,fontes.standard_italique,None
171 def get_objet(self,name) :
172 for v in self.object.mc_liste:
173 if v.nom == name : return v
176 def get_type_sd_prod(self):
178 Retourne le nom du type du concept résultat de l'étape
180 sd_prod=self.object.get_type_produit()
182 return sd_prod.__name__
186 def additem(self,name,pos):
187 #print "compooper.additem",name,pos
188 mcent = self._object.addentite(name,pos)
191 def suppitem(self,item) :
192 # item : item du MOCLE de l'ETAPE à supprimer
193 # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
194 itemobject=item.getObject()
195 if itemobject.isoblig() :
196 self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
198 if self.object.suppentite(itemobject):
199 message = "Mot-clé " + itemobject.nom + " supprimé"
200 self.appli.affiche_infos(message)
203 self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
208 return self.object.get_sdname()
213 keys=self.object.mc_dict.keys()
216 def GetSubList(self):
218 Reactualise la liste des items fils stockes dans self.sublist
221 liste=self.object.mc_liste
225 sublist=[None]*len(liste)
226 # suppression des items lies aux objets disparus
227 for item in self.sublist:
228 old_obj=item.getObject()
230 pos=liste.index(old_obj)
233 pass # objets supprimes ignores
235 # ajout des items lies aux nouveaux objets
238 if sublist[pos] is None:
239 # nouvel objet : on cree un nouvel item
240 def setfunction(value, object=obj):
242 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
250 return self.object.isvalid()
252 def iscopiable(self):
254 Retourne 1 si l'objet est copiable, 0 sinon
258 def update(self,item):
259 if item.sd and item.sd.nom:
260 self.nomme_sd(item.sd.nom)
262 def nomme_sd(self,nom):
263 """ Lance la méthode de nommage de la SD """
265 if self.object.sd != None :
266 oldnom=self.object.sd.nom
267 test,mess= self.object.nomme_sd(nom)
268 if test:self.object.parent.reset_context()
269 if (test and self.appli.dict_reels.has_key(oldnom) ):
270 self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
273 def is_reentrant(self):
274 return self.object.is_reentrant()
276 def get_noms_sd_oper_reentrant(self):
277 return self.object.get_noms_sd_oper_reentrant()
279 def get_objet_commentarise(self):
281 Cette méthode retourne un objet commentarisé
282 représentatif de self.object
284 import generator,string,Accas
285 # Format de fichier utilisé
286 format=self.appli.format_fichier.get()
287 g=generator.plugins[format]()
288 texte_commande = g.gener(self.object,format='beautifie')
289 # Il faut enlever la première ligne vide de texte_commande que
290 # rajoute le generator
291 rebut,texte_commande = string.split(texte_commande,'\n',1)
292 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
293 # enregistré dans le jdc
294 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
295 parent=self.object.parent)
296 commande_comment.niveau = self.object.niveau
297 commande_comment.jdc = commande_comment.parent = self.object.jdc
299 pos=self.object.parent.etapes.index(self.object)
300 parent=self.object.parent
301 self.object.parent.suppentite(self.object)
302 addentite(commande_comment,pos)
304 return commande_comment
307 treeitem = EtapeTreeItem