12 def __init__(self,appli,parent):
13 # parent représente l'objet graphique parent
15 # appli représente l'objet application parent
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)
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)
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'),
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'),
42 ('Delete24',self.appli.delete,"Supprime l'objet courant",'jdc'),
43 ('Help24',self.appli.view_doc,"Documentation de l'objet courant",'jdc')
45 # liste des boutons à activer quand statut != 'always'
46 self.l_boutons_a_activer = []
48 for bouton in self.l_boutons :
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')
55 nom_fic,commande,texte,statut = bouton
56 b = Button(self.barreboutons,
57 image = images.get_image(nom_fic),
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)
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()
76 def inactive_boutons(self):
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
81 for but in self.l_boutons_a_activer:
82 but.configure(state='disabled')
84 def active_boutons(self):
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
89 for but in self.l_boutons_a_activer:
90 but.configure(state='normal')
92 def affiche_balloon(self,event,bouton,bulle,pos='left'):
94 Affiche le balloon bulle associé au bouton bouton
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,
107 self.balloon.place(in_=self.parent,x=x,y=32)
109 self.balloon.place(in_=self.parent,x=x,y=32,anchor='ne')
111 def efface_balloon(self,event=None):
113 Efface le balloon courant
116 self.balloon.destroy()
119 def view_infos(self):
121 Permet d'afficher des infos sur la session courante d'EFICAS
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(),
131 anchor='center').pack(side='top',anchor='center')
132 self.fen_infos.activate(geometry = 'centerscreenalways')
134 def close_infos(self,lbl):
136 Ferme la fenêtre des infos
138 self.fen_infos.destroy()
140 def creer_boutons_extension(self,l_boutons,extension):
141 for bouton in l_boutons :
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')
148 nom_fic,commande,texte,statut = bouton
149 commande=getattr(extension,commande)
150 b = Button(self.barreboutons,
151 image = images.get_image(nom_fic),
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)
160 # inactive les boutons qui doivent l'être tant qu'aucun JDC courant
161 self.inactive_boutons()