]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/jdcdisplay.py
Salome HOME
CCAR: Modified Files:
[tools/eficas.git] / Editeur / jdcdisplay.py
1 """
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é
5 """
6 # Modules Python
7 import Tkinter
8 import Pmw
9
10 # Modules Eficas
11 import panels
12 from treeitemincanvas import TREEITEMINCANVAS
13 from tkMessageBox import showinfo,showerror
14
15 class CONFIG:
16    isdeveloppeur='NON'
17
18 class JDCDISPLAY:
19    """
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
23    """
24    def __init__(self,jdc,nom_jdc,appli=None,parent=None):
25       self.jdc=jdc
26       self.nom_jdc=nom_jdc
27       self.fichier=None
28
29       if not appli:
30          class Appli:
31             def __init__(self):
32                self.CONFIGURATION=CONFIG()
33             def affiche_infos(self,message):
34                print message
35                return
36
37             def efface_aide(self,event):
38                return
39
40             def affiche_aide(self,event,aide):
41                print aide
42                return
43
44          appli=Appli()
45       self.appli=appli
46
47       if not parent:
48          parent=Tkinter.Tk()
49          Pmw.initialise(parent)
50       self.parent=parent
51       self.node_selected = None
52       self.modified='n'
53
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)
60
61    def select_node(self,node):
62       """
63           Cette méthode est appelée à chaque fois qu'un noeud est sélectionné
64           dans l'arbre.
65           Elle permet l'affichage du panneau correspondant au noeud sélectionné
66       """
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
73       else:
74           self.ancien_node = self.node_selected = node
75
76    def create_panel(self,node):
77       """
78          Lance la génération du panneau contextuel de l'objet sélectionné 
79          dans l'arbre
80       """
81       if node.item.isactif():
82           if hasattr(node.item,"panel"):
83               return node.item.panel(self,self.pane.pane('selected'),node)
84           else:
85               raise Exception("Le noeud sélectionné n'a pas de panel associé")
86       else:
87           return panels.Panel_Inactif(self,self.pane.pane('selected'),node)
88
89    def init_modif(self):
90       """
91           Met l'attribut modified à 'o' : utilisé par Eficas pour savoir 
92           si un JDC doit être sauvegardé avant destruction ou non
93       """
94       self.modified = 'o'
95
96    def stop_modif(self):
97       """
98           Met l'attribut modified à 'n' : utilisé par Eficas pour savoir 
99           si un JDC doit être sauvegardé avant destruction ou non
100       """
101       self.modified = 'n'
102
103    def mainloop(self):
104       self.parent.mainloop()
105
106    def ReplaceObjectNode(self,node,new_object,nom_sd=None):
107       """
108       Cette méthode sert à remplacer l'objet pointé par node par
109       new_object.
110       Si nom_sd : on remplace un OPER et on essaie de renommer la
111       nouvelle sd par nom_sd
112       """
113       child = node.append_brother(new_object,retour='oui')
114       if child == 0:
115           self.appli.affiche_infos("Impossible de remplacer l'objet du noeud courant")
116       else:
117           self.init_modif()
118           node.delete()
119           if nom_sd:
120               child.item.nomme_sd(nom_sd)
121           child.update()
122
123    def doCut(self):
124       """
125       Stocke dans Eficas.noeud_a_editer le noeud à couper
126       """
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")
130           return
131       self.edit="couper"
132       self.appli.noeud_a_editer = self.node_selected
133
134    def doCopy(self):
135       """
136       Stocke dans Eficas.noeud_a_editer le noeud à copier
137       """
138       if not self.node_selected.item.iscopiable():
139           showinfo("Copie impossible",
140                    "La copie d'un tel objet n'est pas permise")
141           return
142       self.edit="copier"
143       self.appli.noeud_a_editer = self.node_selected
144
145    def doPaste(self):
146       """
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
149       """
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)
155       else:
156           showinfo("Copie impossible",
157                    "Vous ne pouvez copier que des commandes ou des mots-clés facteurs !")
158           return
159
160    def doPaste_Commande(self,objet_a_copier):
161       """
162           Réalise la copie de l'objet passé en argument qui est nécessairement 
163           une commande
164       """
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',
171                                                      retour='oui')
172       else:
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")
176           return
177       # il faut déclarer le JDCDisplay_courant modifié
178       self.init_modif()
179       # suppression éventuelle du noeud sélectionné
180       if self.edit == "couper":
181           self.appli.noeud_a_editer.delete()
182       if child == 0:
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
189       self.edit="copier"
190
191    def doPaste_MCF(self,objet_a_copier):
192       """
193       Réalise la copie de l'objet passé en argument qui est nécessairement un MCF
194       """
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,
207                                                             retour='oui')
208           else:
209              # le noeud MCFACT selectionne n'est pas dans une MCList
210              child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
211       else:
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")
215           return
216       # il faut déclarer le JDCDisplay_courant modifié
217       self.init_modif()
218       # suppression éventuelle du noeud sélectionné
219       if self.edit == "couper":
220           self.appli.noeud_a_editer.delete()
221       if child == 0:
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
227       self.edit="copier"
228