Salome HOME
Version initiale de EFICAS 1.2
[tools/eficas.git] / Editeur / toolbar.py
1 """
2 """
3 # Modules Python
4 import string
5 from Tkinter import *
6 import Pmw
7
8 # Modules Eficas
9 import images
10
11 class TOOLBAR:
12   def __init__(self,appli,parent):
13       # parent représente l'objet graphique parent
14       self.parent=parent
15       # appli représente l'objet application parent
16       self.appli=appli
17       self.balloon = None
18       self.l_boutons_a_activer = []
19       self.barreboutons=Frame(self.parent,relief='ridge',bd=2)
20       self.barreboutons.pack(anchor='nw',expand=0,fill=X)
21       # bouton Infos à l'extrême droite de la barre des boutons
22       b = Button(self.barreboutons,
23                  image = images.get_image('About24'),
24                  command = self.view_infos)
25       b.pack(side='right')
26       texte = "Infos EFICAS"
27       b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right'))
28       b.bind("<Leave>", self.efface_balloon)
29
30       #self.creer_boutons()
31
32   def creer_boutons(self):
33       self.l_boutons = (('New24',self.appli.newJDC,"Création d'un nouveau fichier",'always'),
34                         ('Open24',self.appli.openJDC,"Ouverture d'un fichier existant",'always'),
35                         ('Save24',self.appli.saveJDC,"Sauvegarde du fichier courant",'always'),
36                         ('Zoom24',self.appli.visuJDC,"Visualisation du fichier de commandes",'always'),
37                         None,
38                         ('Copy24',self.appli.copy,"Copie l'objet courant",'jdc'),
39                         ('Cut24',self.appli.cut,"Coupe l'objet courant",'jdc'),
40                         ('Paste24',self.appli.paste,"Colle l'objet copié après l'objet courant",'jdc'),
41                         None,
42                         ('Delete24',self.appli.delete,"Supprime l'objet courant",'jdc'),
43                         ('Help24',self.appli.view_doc,"Documentation de l'objet courant",'jdc')
44                         )
45       # liste des boutons à activer quand statut != 'always'
46       self.l_boutons_a_activer = [] 
47
48       for bouton in self.l_boutons :
49           if not bouton :
50               # on veut afficher un bouton vide (=espace entre boutons)
51               Button(self.barreboutons,
52                      image = images.get_image('New24'),
53                      relief = 'flat').pack(side='left')
54               continue
55           nom_fic,commande,texte,statut = bouton
56           b = Button(self.barreboutons,
57                      image = images.get_image(nom_fic),
58                      command = commande,
59                      relief='flat')
60           b.pack(side='left')
61           b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t))
62           b.bind("<Leave>", self.efface_balloon)
63           if statut != 'always':
64               self.l_boutons_a_activer.append(b)
65       # bouton Infos à l'extrême droite de la barre des boutons
66       b = Button(self.barreboutons,
67                  image = images.get_image('About24'),
68                  command = self.view_infos)
69       b.pack(side='right')
70       texte = "Infos EFICAS"
71       b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right'))
72       b.bind("<Leave>", self.efface_balloon)
73       # inactive les boutons qui doivent l'être tant qu'aucun JDC courant
74       self.inactive_boutons()
75
76   def inactive_boutons(self):
77       """
78       Inactive les boutons de la liste self.l_boutons_a_activer
79       --> cette méthode est appelée dès qu'il n'y a pas de JDC courant
80       """
81       for but in self.l_boutons_a_activer:
82           but.configure(state='disabled')
83
84   def active_boutons(self):
85       """
86       Active les boutons de la liste self.l_boutons_a_activer
87       --> cette méthode est appelée dès qu'il y a un JDC courant
88       """
89       for but in self.l_boutons_a_activer:
90           but.configure(state='normal')
91
92   def affiche_balloon(self,event,bouton,bulle,pos='left'):
93       """
94       Affiche le balloon bulle associé au bouton bouton
95       """
96       etat = bouton.cget('state')
97       if etat != 'normal' : return
98       geom = bouton.winfo_geometry()
99       l_args = string.split(geom,'+')
100       x = eval(l_args[1])+event.x+10
101       self.balloon = Label(self.parent,
102                            text = bulle,
103                            background="yellow",
104                            borderwidth=2,
105                            relief='ridge')
106       if pos == 'left':
107           self.balloon.place(in_=self.parent,x=x,y=32)
108       else:
109           self.balloon.place(in_=self.parent,x=x,y=32,anchor='ne')
110
111   def efface_balloon(self,event=None):
112       """
113       Efface le balloon courant
114       """
115       if self.balloon :
116           self.balloon.destroy()
117           self.balloon = None
118
119   def view_infos(self):
120       """
121       Permet d'afficher des infos sur la session courante d'EFICAS
122       """
123       self.fen_infos = Pmw.Dialog(self.parent,
124                                   title = 'Informations session EFICAS',
125                                   buttons = ('Fermer',),
126                                   command = self.close_infos)
127       self.fen_infos.withdraw()
128       texte_infos = self.appli.get_texte_infos()
129       Label(self.fen_infos.interior(),
130             text = texte_infos,
131             anchor='center').pack(side='top',anchor='center')
132       self.fen_infos.activate(geometry = 'centerscreenalways')
133
134   def close_infos(self,lbl):
135       """
136       Ferme la fenêtre des infos
137       """
138       self.fen_infos.destroy()
139
140   def creer_boutons_extension(self,l_boutons,extension):
141       for bouton in l_boutons :
142           if not bouton :
143               # on veut afficher un bouton vide (=espace entre boutons)
144               Button(self.barreboutons,
145                      image = images.get_image('New24'),
146                      relief = 'flat').pack(side='left')
147               continue
148           nom_fic,commande,texte,statut = bouton
149           commande=getattr(extension,commande)
150           b = Button(self.barreboutons,
151                      image = images.get_image(nom_fic),
152                      command = commande,
153                      relief='flat')
154           b.pack(side='left')
155           b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t))
156           b.bind("<Leave>", self.efface_balloon)
157           if statut != 'always':
158               self.l_boutons_a_activer.append(b)
159
160       # inactive les boutons qui doivent l'être tant qu'aucun JDC courant
161       self.inactive_boutons()
162
163