Salome HOME
Version initiale de EFICAS 1.2
[tools/eficas.git] / Editeur / fenetre_mc_inconnus.py
1 """
2 """
3 # Modules Python
4 from Tkinter import *
5 import copy
6
7 # Modules Eficas
8 from centerwindow import centerwindow
9
10 class fenetre_mc_inconnus :
11     """
12        Cette classe sert à construire la fenêtre qui apparaît dans EFICAS 
13        lorsque des mots-clés inconnus ont été trouvés dans le fichier de 
14        commandes que l'on est en train de lire
15     """
16     def __init__(self,l_mc):
17        self.l_mc = l_mc
18        self.fenetre = Toplevel()
19        self.fenetre.geometry("400x400+0+0")
20        self.fenetre.title("Mots-clés inconnus dans le fichier de commandes")
21        self.init()
22        self.init_frames()
23        self.init_label()
24        self.init_liste_mc()
25        self.init_boutons()
26        centerwindow(self.fenetre)
27
28     def init(self) :
29        """
30        Initialise les structures de données
31        """
32        self.new_l_mc = []
33        for mc in self.l_mc :
34            self.new_l_mc.append(copy.copy(mc))
35        self.mc_courant = None
36        self.var_quit = IntVar(0)
37        self.entry_courante = None
38                
39     def init_frames(self):
40        """
41        Création des 2 frames devant contenir le label et la liste des MC inconnus 
42        """
43        self.frame1 = Frame(self.fenetre)
44        self.frame2 = Frame(self.fenetre)
45        self.frame3 = Frame(self.fenetre)
46        self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1)
47        self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1)
48        self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1)
49        self.frame21 = Frame(self.frame2)
50        self.frame22 = Frame(self.frame2)
51        self.frame21.place(relx=0,rely=0,relwidth=0.6,relheight=1)
52        self.frame22.place(relx=0.6,rely=0,relwidth=0.4,relheight=1)
53     
54     def init_label(self):
55        """
56        Affichage du label dans la zone concernée
57        """
58        txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes."
59        txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
60        self.fenetre.update_idletasks()
61        Label(self.frame1,
62              text = txt,
63              wraplength = int(self.frame1.winfo_width()*0.8),
64              justify = 'center').place(relx=0.5,rely=0.5,anchor='center')   
65     
66     
67     def init_liste_mc(self):
68        """
69        Affiche les mots-clés à modifier ou supprimer  
70        """
71        for mc in self.l_mc :
72            # mc est une liste :
73            # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ...
74            # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur
75            path_mc = self.get_path(mc[0:-2])
76            nom_mc  = mc[-2]
77            Label(self.frame21,text = path_mc).pack(side='left')
78            e = Entry(self.frame22)
79            e.pack(side='left')
80            e.insert(END,nom_mc)
81            e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
82            e.bind("<Return>",lambda e,s=self : s.modifie_mc())
83            e.configure(relief='flat',state='disabled')
84
85     def init_boutons(self):
86         """
87         Construit les boutons Modifier,Supprimer et Fermer 
88         Les deux premiers sont inactifs tant qu'aucun mot-clé n'est sélectionné
89         """
90         self.b_mod = Button(self.frame3,
91                             text = "Modifier",
92                             disabledforeground = 'grey35',
93                             state='disabled',
94                             command = self.modifie_mc)
95         self.b_sup = Button(self.frame3,
96                             text = "Supprimer",
97                             disabledforeground = 'grey35',
98                             state='disabled',
99                             command = self.supprime_mc)
100         self.b_quit = Button(self.frame3,
101                             text = "Fermer",
102                             command = self.quit)
103         self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
104         self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
105         self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
106                             
107     def wait_new_list(self):
108         """
109         Cette méthode rend cette toplevel bloquante.
110         Dès que la variable var_quit est modifiée, on continue l'exécution de cette
111         méthode (et on quitte)
112         """
113         self.fenetre.wait_variable(self.var_quit)
114         self.fenetre.destroy()
115         return self.new_l_mc
116                            
117     def get_path(self,l_o):
118         """
119         Construit la chaîne de caractère contenant le chemin d'accès complet du mot-clé
120         """
121         txt = ''
122         for o in l_o :
123            print o
124            txt = txt + o.nom+'/'
125         # on enlève le dernier slash en trop
126         txt = txt[0:-1]
127         return txt    
128     
129     def select_mc(self,mc,entry):
130         """
131         Enregistre le mot-clé passé en argument comme mot-clé courant
132         Active les boutons Modifier et Supprimer
133         """
134         self.desactive_entry()
135         self.mc_courant     = mc
136         self.entry_courante = entry
137         self.active_boutons()
138         self.active_entry()
139
140     def modifie_mc(self):
141         """
142         Modifie le nom du mot-clé en prenant la nouvelle valeur lue dans entry_courante
143         """
144         new_nom_mc = self.entry_courante.get()
145         index = self.l_mc.index(self.mc_courant)
146         new_mc = self.new_l_mc[index]
147         new_mc[-2] = new_nom_mc
148         objet_pere = self.mc_courant[-3]
149         
150         self.desactive_boutons()
151         self.desactive_entry()
152
153     def supprime_mc(self):
154         """
155         Supprime le mot-clé courant de la liste
156         """
157         index = self.l_mc.index(self.mc_courant)
158         self.new_l_mc[index] = None
159         self.desactive_boutons()
160         self.desactive_entry()  
161         
162     def desactive_boutons(self):
163         """
164         Désactive les boutons Modifier et Supprimer
165         """
166         self.b_mod.configure(state='disabled')
167         self.b_sup.configure(state='disabled')
168                 
169     def active_boutons(self):
170         """
171         Active les boutons Modifier et Supprimer
172         """
173         self.b_mod.configure(state='normal')
174         self.b_sup.configure(state='normal')
175
176     def desactive_entry(self):
177         """
178         Désactive l'entry courante si elle existe
179         """
180         if self.entry_courante :
181            self.entry_courante.configure(state='disabled',relief='flat')
182            
183     def active_entry(self):
184         """
185         Active l'entry courante si elle existe
186         """
187         if self.entry_courante :
188            self.entry_courante.configure(state='normal',relief='sunken')
189                    
190     def quit(self):
191         """
192         Permet de fermer la fenêtre
193         """
194         self.var_quit.set(1)
195
196 if __name__ == '__main__':
197    fenetre_mc_inconnus(('toto','titi'))