1 # CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
27 from centerwindow import centerwindow
29 class fenetre_mc_inconnus :
31 Cette classe sert à construire la fenêtre qui apparaît dans EFICAS
32 lorsque des mots-clés inconnus ont été trouvés dans le fichier de
33 commandes que l'on est en train de lire
35 def __init__(self,l_mc):
37 self.fenetre = Toplevel()
38 self.fenetre.geometry("400x400+0+0")
39 self.fenetre.title("Mots-clés inconnus dans le fichier de commandes")
45 centerwindow(self.fenetre)
49 Initialise les structures de données
53 self.new_l_mc.append(copy.copy(mc))
54 self.mc_courant = None
55 self.var_quit = IntVar(0)
56 self.entry_courante = None
58 def init_frames(self):
60 Création des 2 frames devant contenir le label et la liste des MC inconnus
62 self.frame1 = Frame(self.fenetre)
63 self.frame2 = Frame(self.fenetre)
64 self.frame3 = Frame(self.fenetre)
65 self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1)
66 self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1)
67 self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1)
68 self.frame21 = Frame(self.frame2)
69 self.frame22 = Frame(self.frame2)
70 self.frame21.place(relx=0,rely=0,relwidth=0.6,relheight=1)
71 self.frame22.place(relx=0.6,rely=0,relwidth=0.4,relheight=1)
75 Affichage du label dans la zone concernée
77 txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes."
78 txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
79 self.fenetre.update_idletasks()
82 wraplength = int(self.frame1.winfo_width()*0.8),
83 justify = 'center').place(relx=0.5,rely=0.5,anchor='center')
86 def init_liste_mc(self):
88 Affiche les mots-clés à modifier ou supprimer
92 # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ...
93 # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur
94 path_mc = self.get_path(mc[0:-2])
96 Label(self.frame21,text = path_mc).pack(side='left')
97 e = Entry(self.frame22)
100 e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
101 e.bind("<Return>",lambda e,s=self : s.modifie_mc())
102 e.configure(relief='flat',state='disabled')
104 def init_boutons(self):
106 Construit les boutons Modifier,Supprimer et Fermer
107 Les deux premiers sont inactifs tant qu'aucun mot-clé n'est sélectionné
109 self.b_mod = Button(self.frame3,
111 disabledforeground = 'grey35',
113 command = self.modifie_mc)
114 self.b_sup = Button(self.frame3,
116 disabledforeground = 'grey35',
118 command = self.supprime_mc)
119 self.b_quit = Button(self.frame3,
122 self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
123 self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
124 self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
126 def wait_new_list(self):
128 Cette méthode rend cette toplevel bloquante.
129 Dès que la variable var_quit est modifiée, on continue l'exécution de cette
130 méthode (et on quitte)
132 self.fenetre.wait_variable(self.var_quit)
133 self.fenetre.destroy()
136 def get_path(self,l_o):
138 Construit la chaîne de caractère contenant le chemin d'accès complet du mot-clé
143 txt = txt + o.nom+'/'
144 # on enlève le dernier slash en trop
148 def select_mc(self,mc,entry):
150 Enregistre le mot-clé passé en argument comme mot-clé courant
151 Active les boutons Modifier et Supprimer
153 self.desactive_entry()
155 self.entry_courante = entry
156 self.active_boutons()
159 def modifie_mc(self):
161 Modifie le nom du mot-clé en prenant la nouvelle valeur lue dans entry_courante
163 new_nom_mc = self.entry_courante.get()
164 index = self.l_mc.index(self.mc_courant)
165 new_mc = self.new_l_mc[index]
166 new_mc[-2] = new_nom_mc
167 objet_pere = self.mc_courant[-3]
169 self.desactive_boutons()
170 self.desactive_entry()
172 def supprime_mc(self):
174 Supprime le mot-clé courant de la liste
176 index = self.l_mc.index(self.mc_courant)
177 self.new_l_mc[index] = None
178 self.desactive_boutons()
179 self.desactive_entry()
181 def desactive_boutons(self):
183 Désactive les boutons Modifier et Supprimer
185 self.b_mod.configure(state='disabled')
186 self.b_sup.configure(state='disabled')
188 def active_boutons(self):
190 Active les boutons Modifier et Supprimer
192 self.b_mod.configure(state='normal')
193 self.b_sup.configure(state='normal')
195 def desactive_entry(self):
197 Désactive l'entry courante si elle existe
199 if self.entry_courante :
200 self.entry_courante.configure(state='disabled',relief='flat')
202 def active_entry(self):
204 Active l'entry courante si elle existe
206 if self.entry_courante :
207 self.entry_courante.configure(state='normal',relief='sunken')
211 Permet de fermer la fenêtre
215 if __name__ == '__main__':
216 fenetre_mc_inconnus(('toto','titi'))