2 Ce module contient la classe JDCDISPLAY qui réalise l'affichage
3 du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
4 les informations attachées au noeud de l'arbre sélectionné
12 from treeitemincanvas import TREEITEMINCANVAS
13 from tkMessageBox import showinfo,showerror
20 Cette classe ajoute à la class TREEITEMINCANVAS l'affichage des infos
21 attachées au noeud sélectionné dans un notebook
22 L'objet item associé au jdc est créé par la classe TREEITEMINCANVAS
24 def __init__(self,jdc,nom_jdc,appli=None,parent=None):
32 self.CONFIGURATION=CONFIG()
33 def affiche_infos(self,message):
37 def efface_aide(self,event):
40 def affiche_aide(self,event,aide):
49 Pmw.initialise(parent)
51 self.node_selected = None
54 self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
55 self.pane.add('treebrowser',min=0.5)
56 self.pane.add('selected',min=0.5)
57 self.pane.pack(expand=1,fill='both')
58 self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
59 self.appli,self.select_node)
61 def select_node(self,node):
63 Cette méthode est appelée à chaque fois qu'un noeud est sélectionné
65 Elle permet l'affichage du panneau correspondant au noeud sélectionné
67 if node is not self.node_selected :
68 self.create_panel(node)
69 # on conserve la trace du noeud sélectionné et de celui d'avant
70 if self.node_selected :
71 self.ancien_node = self.node_selected
72 self.node_selected = node
74 self.ancien_node = self.node_selected = node
76 def create_panel(self,node):
78 Lance la génération du panneau contextuel de l'objet sélectionné
81 if node.item.isactif():
82 if hasattr(node.item,"panel"):
83 return node.item.panel(self,self.pane.pane('selected'),node)
85 raise Exception("Le noeud sélectionné n'a pas de panel associé")
87 return panels.Panel_Inactif(self,self.pane.pane('selected'),node)
91 Met l'attribut modified à 'o' : utilisé par Eficas pour savoir
92 si un JDC doit être sauvegardé avant destruction ou non
98 Met l'attribut modified à 'n' : utilisé par Eficas pour savoir
99 si un JDC doit être sauvegardé avant destruction ou non
104 self.parent.mainloop()
106 def ReplaceObjectNode(self,node,new_object,nom_sd=None):
108 Cette méthode sert à remplacer l'objet pointé par node par
110 Si nom_sd : on remplace un OPER et on essaie de renommer la
111 nouvelle sd par nom_sd
113 child = node.append_brother(new_object,retour='oui')
115 self.appli.affiche_infos("Impossible de remplacer l'objet du noeud courant")
120 child.item.nomme_sd(nom_sd)
125 Stocke dans Eficas.noeud_a_editer le noeud à couper
127 if not self.node_selected.item.iscopiable():
128 showinfo("Copie impossible",
129 "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur")
132 self.appli.noeud_a_editer = self.node_selected
136 Stocke dans Eficas.noeud_a_editer le noeud à copier
138 if not self.node_selected.item.iscopiable():
139 showinfo("Copie impossible",
140 "La copie d'un tel objet n'est pas permise")
143 self.appli.noeud_a_editer = self.node_selected
147 Lance la copie de l'objet placé dans self.appli.noeud_a_editer
148 Ne permet que la copie d'objets de type Commande ou MCF
150 objet_a_copier = self.appli.noeud_a_editer.item.get_copie_objet()
151 if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE'):
152 self.doPaste_Commande(objet_a_copier)
153 elif objet_a_copier.__class__.__name__ == "MCFACT":
154 self.doPaste_MCF(objet_a_copier)
156 showinfo("Copie impossible",
157 "Vous ne pouvez copier que des commandes ou des mots-clés facteurs !")
160 def doPaste_Commande(self,objet_a_copier):
162 Réalise la copie de l'objet passé en argument qui est nécessairement une commande
164 # il faut vérifier que le noeud sélectionné (noeud courant) est bien
165 # une commande ou un JDC sinon la copie est impossible ...
166 if self.node_selected.item.isCommande() :
167 child = self.node_selected.append_brother(objet_a_copier,retour='oui')
168 elif self.node_selected.item.isJdc() :
169 child = self.node_selected.append_child(objet_a_copier,retour='oui')
171 showinfo("Copie impossible",
172 "Vous ne pouvez coller la commande copiée à ce niveau de l'arborescence !")
173 self.appli.affiche_infos("Copie refusée")
175 # il faut déclarer le JDCDisplay_courant modifié
177 # suppression éventuelle du noeud sélectionné
178 if self.edit == "couper":
179 self.appli.noeud_a_editer.delete()
181 # la copie est impossible
182 if self.appli.message != '':
183 showerror("Copie refusée",self.appli.message)
184 self.appli.message = ''
185 self.appli.affiche_infos("Copie refusée")
186 # on rend la copie à nouveau possible en libérant le flag edit
189 def doPaste_MCF(self,objet_a_copier):
191 Réalise la copie de l'objet passé en argument qui est nécessairement un MCF
193 if self.node_selected.item.isCommande() :
194 # le noeud courant est une ETAPE
195 child = self.node_selected.append_child(objet_a_copier,retour='oui')
196 elif self.node_selected.item.isMCList() :
197 # le noeud courant est une MCList
198 child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
199 elif self.node_selected.item.isMCFact():
200 # le noeud courant est un MCFACT
201 child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
203 showinfo("Copie impossible",
204 "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
205 self.appli.affiche_infos("Copie refusée")
207 # il faut déclarer le JDCDisplay_courant modifié
209 # suppression éventuelle du noeud sélectionné
210 if self.edit == "couper":
211 self.appli.noeud_a_editer.delete()
213 if self.appli.message != '':
214 showerror("Copie refusée",self.appli.message)
215 self.appli.message = ''
216 self.appli.affiche_infos("Copie refusée")
217 # on rend la copie à nouveau possible en libérant le flag edit