1 # CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
27 class OPERPanel(panels.OngletPanel):
30 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
31 nb.pack(fill = 'both', expand = 1)
33 nb.add('Mocles', tab_text='Nouveau mot-clé')
34 nb.add('Concept', tab_text='Nommer concept')
35 nb.add('Commande', tab_text='Nouvelle Commande')
36 nb.add('Commentaire',tab_text='Paramètre/Commentaire')
37 panneau=Pmw.PanedWidget(nb.page("Mocles"),
39 panneau.add('left',min=0.4,max=0.6,size=0.5)
40 panneau.add('right',min=0.4,max=0.6,size=0.5)
41 panneau.pack(expand=1,fill='both')
42 self.makeCommandePage(nb.page("Commande"))
43 self.makeConceptPage_oper(nb.page("Concept"))
44 self.makeMoclesPage(panneau.pane('left'))
45 self.makeReglesPage(panneau.pane('right'))
46 #self.makeCommentairePage(nb.page("Commentaire"))
47 self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
48 nb.tab('Mocles').focus_set()
52 def makeConceptPage_oper(self,page):
53 """ Crée la page de saisie du nom du concept """
54 if self.node.item.is_reentrant():
55 self.makeConceptPage_reentrant(page)
57 self.makeConceptPage(page)
59 def makeConceptPage_reentrant(self,page):
60 """ Crée la page de saisie du nom de concept pour un opérateur reentrant
61 cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
62 type est compatible avec celui que retourne l'opérateur """
63 liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
64 self.listbox = Pmw.ScrolledListBox(page,
67 label_text="Structure(s) de données à enrichir par l'opérateur courant :",
69 selectioncommand=self.select_valeur_from_list,
70 dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
71 self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
72 Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
73 self.valeur_choisie = StringVar()
74 self.label_valeur = Label(page,textvariable=self.valeur_choisie)
75 self.label_valeur.place(relx=0.45,rely=0.6)
76 if len(liste_noms_sd) == 1 :
77 self.valeur_choisie.set(liste_noms_sd[0])
79 def select_valeur_from_list(self):
81 choix = self.listbox.getcurselection()[0]
82 self.valeur_choisie.set(choix)
87 def choose_valeur_from_list(self,command):
89 choix = self.listbox.getcurselection()[0]
90 self.valeur_choisie.set(choix)
95 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
98 def IsExpandable(self):
101 def GetIconName(self):
103 Retourne le nom de l'icône à afficher dans l'arbre
104 Ce nom dépend de la validité de l'objet
106 if self.object.isactif():
107 if self.object.isvalid():
108 return "ast-green-square"
110 return "ast-red-square"
112 return "ast-white-square"
114 def GetLabelText(self):
115 """ Retourne 3 valeurs :
116 - le texte à afficher dans le noeud représentant l'item
117 - la fonte dans laquelle afficher ce texte
118 - la couleur du texte
120 if self.object.isactif():
121 # None --> fonte et couleur par défaut
122 return self.labeltext,None,None
124 return self.labeltext,fontes.standard_italique,None
126 def get_objet(self,name) :
127 for v in self.object.mc_liste:
128 if v.nom == name : return v
131 def get_type_sd_prod(self):
133 Retourne le nom du type du concept résultat de l'étape
135 sd_prod=self.object.get_type_produit()
137 return sd_prod.__name__
141 def additem(self,name,pos):
142 if isinstance(name,Objecttreeitem.ObjectTreeItem) :
143 mcent = self.object.addentite(name.object,pos)
145 mcent = self.object.addentite(name,pos)
148 # on ne peut ajouter l'élément de nom name
150 def setfunction(value, object=mcent):
152 item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
155 def suppitem(self,item) :
156 # item : item du MOCLE de l'ETAPE à supprimer
157 # item.object = MCSIMP, MCFACT, MCBLOC ou MCList
158 if item.object.isoblig() :
159 self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
162 self.object.suppentite(item.object)
163 message = "Mot-clé " + item.object.nom + " supprimé"
164 self.appli.affiche_infos(message)
169 return self.object.get_sdname()
174 keys=self.object.mc_dict.keys()
177 def GetSubList(self):
179 for obj in self.object.mc_liste:
180 def setfunction(value, object=obj):
182 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
187 return self.object.isvalid()
189 def iscopiable(self):
191 Retourne 1 si l'objet est copiable, 0 sinon
195 def isCommande(self):
197 Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
201 def verif_condition_bloc(self):
202 return self.object.verif_condition_bloc()
204 def nomme_sd(self,nom):
205 """ Lance la méthode de nommage de la SD """
206 test,mess= self.object.nomme_sd(nom)
207 if test:self.object.parent.reset_context()
210 def is_reentrant(self):
211 return self.object.is_reentrant()
213 def get_noms_sd_oper_reentrant(self):
214 return self.object.get_noms_sd_oper_reentrant()
216 def get_objet_commentarise(self):
218 Cette méthode retourne un objet commentarisé
219 représentatif de self.object
221 import generator,string,Accas
222 # Format de fichier utilisé
223 format=self.appli.format_fichier.get()
224 g=generator.plugins[format]()
225 texte_commande = g.gener(self.object,format='beautifie')
226 # Il faut enlever la première ligne vide de texte_commande que
227 # rajoute le generator
228 rebut,texte_commande = string.split(texte_commande,'\n',1)
229 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
230 # enregistré dans le jdc
231 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
232 parent=self.object.parent)
233 commande_comment.niveau = self.object.niveau
234 commande_comment.jdc = commande_comment.parent = self.object.jdc
235 return commande_comment
237 def replace_child(self,old_item,new_item):
239 Remplace old_item.object par new_item.object dans les fils de self.object
241 index = self.object.mc_liste.index(old_item.object)
242 self.object.init_modif()
243 self.object.mc_liste.remove(old_item.object)
244 self.object.mc_liste.insert(index,new_item.object)
245 self.object.fin_modif()
248 treeitem = EtapeTreeItem