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('Concept', tab_text='Nommer concept')
34 nb.add('Mocles', tab_text='Nouveau mot-clé')
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()
49 nb.tab('Concept').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)
96 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
99 def IsExpandable(self):
102 def GetIconName(self):
104 Retourne le nom de l'icône à afficher dans l'arbre
105 Ce nom dépend de la validité de l'objet
107 if self.object.isactif():
108 if self.object.isvalid():
109 return "ast-green-square"
111 return "ast-red-square"
113 return "ast-white-square"
115 def GetLabelText(self):
116 """ Retourne 3 valeurs :
117 - le texte à afficher dans le noeud représentant l'item
118 - la fonte dans laquelle afficher ce texte
119 - la couleur du texte
121 if self.object.isactif():
122 # None --> fonte et couleur par défaut
123 return self.labeltext,None,None
125 return self.labeltext,fontes.standard_italique,None
127 def get_objet(self,name) :
128 for v in self.object.mc_liste:
129 if v.nom == name : return v
132 def get_type_sd_prod(self):
134 Retourne le nom du type du concept résultat de l'étape
136 sd_prod=self.object.get_type_produit()
138 return sd_prod.__name__
142 def additem(self,name,pos):
143 if isinstance(name,Objecttreeitem.ObjectTreeItem) :
144 mcent = self.object.addentite(name.object,pos)
146 mcent = self.object.addentite(name,pos)
149 # on ne peut ajouter l'élément de nom name
151 def setfunction(value, object=mcent):
153 item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
156 def suppitem(self,item) :
157 # item : item du MOCLE de l'ETAPE à supprimer
158 # item.object = MCSIMP, MCFACT, MCBLOC ou MCList
159 if item.object.isoblig() :
160 self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
163 self.object.suppentite(item.object)
164 message = "Mot-clé " + item.object.nom + " supprimé"
165 self.appli.affiche_infos(message)
170 return self.object.get_sdname()
175 keys=self.object.mc_dict.keys()
178 def GetSubList(self):
180 for obj in self.object.mc_liste:
181 def setfunction(value, object=obj):
183 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
188 return self.object.isvalid()
190 def iscopiable(self):
192 Retourne 1 si l'objet est copiable, 0 sinon
196 def isCommande(self):
198 Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
202 def verif_condition_bloc(self):
203 return self.object.verif_condition_bloc()
205 def nomme_sd(self,nom):
206 """ Lance la méthode de nommage de la SD """
207 test,mess= self.object.nomme_sd(nom)
208 if test:self.object.parent.reset_context()
211 def is_reentrant(self):
212 return self.object.is_reentrant()
214 def get_noms_sd_oper_reentrant(self):
215 return self.object.get_noms_sd_oper_reentrant()
217 def get_objet_commentarise(self):
219 Cette méthode retourne un objet commentarisé
220 représentatif de self.object
222 import generator,string,Accas
223 # Format de fichier utilisé
224 format=self.appli.format_fichier.get()
225 g=generator.plugins[format]()
226 texte_commande = g.gener(self.object,format='beautifie')
227 # Il faut enlever la première ligne vide de texte_commande que
228 # rajoute le generator
229 rebut,texte_commande = string.split(texte_commande,'\n',1)
230 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
231 # enregistré dans le jdc
232 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
233 parent=self.object.parent)
234 commande_comment.niveau = self.object.niveau
235 commande_comment.jdc = commande_comment.parent = self.object.jdc
236 return commande_comment
238 def replace_child(self,old_item,new_item):
240 Remplace old_item.object par new_item.object dans les fils de self.object
242 index = self.object.mc_liste.index(old_item.object)
243 self.object.init_modif()
244 self.object.mc_liste.remove(old_item.object)
245 self.object.mc_liste.insert(index,new_item.object)
246 self.object.fin_modif()
249 treeitem = EtapeTreeItem