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','FORM_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
165 # il faut vérifier que le noeud sélectionné (noeud courant) est bien
166 # une commande ou un JDC sinon la copie est impossible ...
167 if self.node_selected.item.isCommande() :
168 child = self.node_selected.append_brother(objet_a_copier,retour='oui')
169 elif self.node_selected.item.isJdc() :
170 child = self.node_selected.append_child(objet_a_copier,pos='first',
173 showinfo("Copie impossible",
174 "Vous ne pouvez coller la commande copiée à ce niveau de l'arborescence !")
175 self.appli.affiche_infos("Copie refusée")
177 # il faut déclarer le JDCDisplay_courant modifié
179 # suppression éventuelle du noeud sélectionné
180 if self.edit == "couper":
181 self.appli.noeud_a_editer.delete()
183 # la copie est impossible
184 if self.appli.message != '':
185 showerror("Copie refusée",self.appli.message)
186 self.appli.message = ''
187 self.appli.affiche_infos("Copie refusée")
188 # on rend la copie à nouveau possible en libérant le flag edit
191 def doPaste_MCF(self,objet_a_copier):
193 Réalise la copie de l'objet passé en argument qui est nécessairement un MCF
195 if self.node_selected.item.isCommande() :
196 # le noeud courant est une ETAPE
197 child = self.node_selected.append_child(objet_a_copier,retour='oui')
198 elif self.node_selected.item.isMCList() :
199 # le noeud courant est une MCList
200 child = self.node_selected.parent.append_child(objet_a_copier,pos='first',retour='oui')
201 elif self.node_selected.item.isMCFact():
202 # le noeud courant est un MCFACT
203 if self.node_selected.parent.item.isMCList():
204 # le noeud selectionne est un MCFACT dans une MCList
205 child = self.node_selected.parent.append_child(objet_a_copier,
206 pos=self.node_selected.item,
209 # le noeud MCFACT selectionne n'est pas dans une MCList
210 child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
212 showinfo("Copie impossible",
213 "Vous ne pouvez coller le mot-clé facteur copié à 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 if self.appli.message != '':
223 showerror("Copie refusée",self.appli.message)
224 self.appli.message = ''
225 self.appli.affiche_infos("Copie refusée")
226 # on rend la copie à nouveau possible en libérant le flag edit