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 # ======================================================================
21 Ce module contient la classe JDCDISPLAY qui réalise l'affichage
22 du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
23 les informations attachées au noeud de l'arbre sélectionné
31 from treeitemincanvas import TREEITEMINCANVAS
32 from tkMessageBox import showinfo,showerror
39 Cette classe ajoute à la class TREEITEMINCANVAS l'affichage des infos
40 attachées au noeud sélectionné dans un notebook
41 L'objet item associé au jdc est créé par la classe TREEITEMINCANVAS
43 def __init__(self,jdc,nom_jdc,appli=None,parent=None):
47 self.panel_courant=None
52 self.CONFIGURATION=CONFIG()
53 def affiche_infos(self,message):
57 def efface_aide(self,event):
60 def affiche_aide(self,event,aide):
69 Pmw.initialise(parent)
71 self.node_selected = None
74 self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
75 self.pane.add('treebrowser',min=0.4,size=0.5)
76 self.pane.add('selected',min=0.4)
77 self.pane.pack(expand=1,fill='both')
78 self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
79 self.appli,self.select_node)
81 def select_node(self,node):
83 Cette méthode est appelée à chaque fois qu'un noeud est sélectionné
85 Elle permet l'affichage du panneau correspondant au noeud sélectionné
87 if node is not self.node_selected :
88 self.create_panel(node)
89 # on conserve la trace du noeud sélectionné et de celui d'avant
90 if self.node_selected :
91 self.ancien_node = self.node_selected
92 self.node_selected = node
94 self.ancien_node = self.node_selected = node
96 def create_panel(self,node):
98 Lance la génération du panneau contextuel de l'objet sélectionné
101 if self.panel_courant:
102 # On detruit le panneau
103 self.panel_courant.destroy()
105 self.panel_courant=None
106 # Mettre à 1 pour verifier les cycles entre objets
110 from Misc import Cyclops
111 z = Cyclops.CycleFinder()
119 if node.item.isactif():
120 if hasattr(node.item,"panel"):
121 self.panel_courant=node.item.panel(self,self.pane.pane('selected'),node)
123 raise Exception("Le noeud sélectionné n'a pas de panel associé")
125 self.panel_courant = panels.Panel_Inactif(self,self.pane.pane('selected'),node)
126 return self.panel_courant
128 def init_modif(self):
130 Met l'attribut modified à 'o' : utilisé par Eficas pour savoir
131 si un JDC doit être sauvegardé avant destruction ou non
135 def stop_modif(self):
137 Met l'attribut modified à 'n' : utilisé par Eficas pour savoir
138 si un JDC doit être sauvegardé avant destruction ou non
143 self.parent.mainloop()
145 def ReplaceObjectNode(self,node,new_object,nom_sd=None):
147 Cette méthode sert à remplacer l'objet pointé par node par
149 Si nom_sd : on remplace un OPER et on essaie de renommer la
150 nouvelle sd par nom_sd
152 child = node.append_brother(new_object,retour='oui')
154 self.appli.affiche_infos("Impossible de remplacer l'objet du noeud courant")
159 child.item.nomme_sd(nom_sd)
164 Stocke dans Eficas.noeud_a_editer le noeud à couper
166 if not self.node_selected.item.iscopiable():
167 showinfo("Copie impossible",
168 "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur")
171 self.appli.noeud_a_editer = self.node_selected
175 Stocke dans Eficas.noeud_a_editer le noeud à copier
177 if not self.node_selected.item.iscopiable():
178 showinfo("Copie impossible",
179 "La copie d'un tel objet n'est pas permise")
182 self.appli.noeud_a_editer = self.node_selected
186 Lance la copie de l'objet placé dans self.appli.noeud_a_editer
187 Ne permet que la copie d'objets de type Commande ou MCF
189 objet_a_copier = self.appli.noeud_a_editer.item.get_copie_objet()
190 if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE','FORM_ETAPE'):
191 self.doPaste_Commande(objet_a_copier)
192 elif objet_a_copier.__class__.__name__ == "MCFACT":
193 self.doPaste_MCF(objet_a_copier)
195 showinfo("Copie impossible",
196 "Vous ne pouvez copier que des commandes ou des mots-clés facteurs !")
199 def doPaste_Commande(self,objet_a_copier):
201 Réalise la copie de l'objet passé en argument qui est nécessairement
204 # il faut vérifier que le noeud sélectionné (noeud courant) est bien
205 # une commande ou un JDC sinon la copie est impossible ...
206 if self.node_selected.item.isCommande() :
207 child = self.node_selected.append_brother(objet_a_copier,retour='oui')
208 elif self.node_selected.item.isJdc() :
209 child = self.node_selected.append_child(objet_a_copier,pos='first',
212 showinfo("Copie impossible",
213 "Vous ne pouvez coller la commande copiée à ce niveau de l'arborescence !")
214 self.appli.affiche_infos("Copie refusée")
216 # il faut déclarer le JDCDisplay_courant modifié
218 # suppression éventuelle du noeud sélectionné
219 if self.edit == "couper":
220 self.appli.noeud_a_editer.delete()
222 # la copie est impossible
223 if self.appli.message != '':
224 showerror("Copie refusée",self.appli.message)
225 self.appli.message = ''
226 self.appli.affiche_infos("Copie refusée")
227 # on rend la copie à nouveau possible en libérant le flag edit
230 def doPaste_MCF(self,objet_a_copier):
232 Réalise la copie de l'objet passé en argument qui est nécessairement un MCF
234 if self.node_selected.item.isCommande() :
235 # le noeud courant est une ETAPE
236 child = self.node_selected.append_child(objet_a_copier,retour='oui')
237 elif self.node_selected.item.isMCList() :
238 # le noeud courant est une MCList
239 child = self.node_selected.parent.append_child(objet_a_copier,pos='first',retour='oui')
240 elif self.node_selected.item.isMCFact():
241 # le noeud courant est un MCFACT
242 if self.node_selected.parent.item.isMCList():
243 # le noeud selectionne est un MCFACT dans une MCList
244 child = self.node_selected.parent.append_child(objet_a_copier,
245 pos=self.node_selected.item,
248 # le noeud MCFACT selectionne n'est pas dans une MCList
249 child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
251 showinfo("Copie impossible",
252 "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
253 self.appli.affiche_infos("Copie refusée")
255 # il faut déclarer le JDCDisplay_courant modifié
257 # suppression éventuelle du noeud sélectionné
258 if self.edit == "couper":
259 self.appli.noeud_a_editer.delete()
261 if self.appli.message != '':
262 showerror("Copie refusée",self.appli.message)
263 self.appli.message = ''
264 self.appli.affiche_infos("Copie refusée")
265 # on rend la copie à nouveau possible en libérant le flag edit