X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Editeur%2Fwidgets.py;h=0b39e7215e21f9d184c6c6ccb10f93fd95349638;hb=f7e5eeea6ebd169ce1f92bb3fe5439f3010c8a16;hp=5a33d958671d3767c8d921bbf77330f0df56f5ce;hpb=a7facb68b1789e54323a37266b75a83cd2c54e69;p=tools%2Feficas.git diff --git a/Editeur/widgets.py b/Editeur/widgets.py index 5a33d958..0b39e721 100644 --- a/Editeur/widgets.py +++ b/Editeur/widgets.py @@ -57,6 +57,7 @@ class Fenetre : def __init__(self,appli,titre="",texte=""): self.appli=appli self.fenetre = Toplevel() + self.fenetre.withdraw() self.fenetre.configure(width = 800,height=500) self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) self.fenetre.title("Visualisation du "+titre) @@ -88,6 +89,7 @@ class Fenetre : # affichage du texte self.affiche_texte(self.texte) centerwindow(self.fenetre) + self.fenetre.deiconify() def page_up(self,event): event.widget.yview_scroll(-1, "page") @@ -130,7 +132,7 @@ class Fenetre : initialdir = self.appli.CONFIGURATION.initialdir, title="Sauvegarde du "+self.titre) if file : - if not save_in_file(file,self.texte) : + if not save_in_file(file,self.texte,None) : showerror("Sauvegarde impossible", "Impossible de sauvegarder le texte dans le fichier spécifié\n"+ "Vérifiez les droits d'écriture") @@ -743,7 +745,11 @@ class ListeChoix : mot=mot+"," else: premier=0 - mot=mot+str(val) + valtexte = self.parent.get_valeur_texte(val) + if valtexte != "" : + mot=mot+valtexte + else: + mot=mot+str(val) mot=mot+")" else: mot=`objet` @@ -758,7 +764,9 @@ class ListeChoix : self.MCbox.insert(END,'\n') if self.optionReturn != None : label.bind("",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c)) + label.bind("",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c)) label.bind("",lambda e,s=self,x=objet,l=label : s.selectNextItem(x,l)) + label.bind("" ,lambda e,s=self,x=objet,l=label : s.selectPrevItem(x,l)) if self.active == 'oui': label.bind(self.liste_commandes[0][0],lambda e,s=self,c=self.liste_commandes[0][1],x=objet,l=label : s.selectitem(x,l,c)) label.bind(self.liste_commandes[1][0],lambda e,s=self,c=self.liste_commandes[1][1],x=objet,l=label : s.deselectitem(l,x,c)) @@ -808,12 +816,16 @@ class ListeChoix : try : index=self.liste.index(mot) indexsuivant=index+1 + if indexsuivant > len(self.liste) -1: + indexsuivant=0 motsuivant=self.liste[indexsuivant] labelsuivant=self.dico_labels[motsuivant] self.clear_marque() if self.selection != None : self.deselectitem(self.selection[1],self.selection[0],self.selection[2],) self.selection = (mot,label,self.selection[2]) + index = self.MCbox.index(labelsuivant) + self.MCbox.see(index) self.highlightitem(labelsuivant) self.arg_selected=motsuivant labelsuivant.focus_set() @@ -821,6 +833,25 @@ class ListeChoix : except: pass + def selectPrevItem(self,mot,label): + try : + index=self.liste.index(mot) + indexprec=index-1 + motprec=self.liste[indexprec] + labelprec=self.dico_labels[motprec] + self.clear_marque() + if self.selection != None : + self.deselectitem(self.selection[1],self.selection[0],self.selection[2],) + self.selection = (mot,label,self.selection[2]) + index = self.MCbox.index(labelprec) + self.MCbox.see(index) + self.highlightitem(labelprec) + self.arg_selected=motprec + labelprec.focus_set() + # PN il faut faire quelque chose pour être dans la fenetre + except: + pass + def selectitem(self,mot,label,commande) : """ Met l'item sélectionné (représenté par son label) en surbrillance @@ -835,6 +866,7 @@ class ListeChoix : def highlightitem(self,label) : """ Met l'item représenté par son label en surbrillance """ + label.focus_set() label.configure(bg='#00008b',fg='white') def markitem(self,label): @@ -870,13 +902,16 @@ class ListeChoix : index = self.MCbox.index(self.dico_labels[arg]) self.MCbox.see(index) self.arg_selected = arg + self.dico_labels[self.arg_selected].focus_set() break - try : - self.dico_labels[self.arg_selected].focus_set() - except : - pass - def get_liste_old(self): + #try : + #self.dico_labels[self.arg_selected].focus_set() + #except : + #pass + + def get_liste_BAK(self): + raise "OBSOLETE" return self.liste # PN attention à la gestion des paramétres @@ -1072,9 +1107,16 @@ class ListeChoixParGroupes(ListeChoix) : Cette classe est utilisée pour afficher une liste de commandes classées par groupes. L'utilisateur peut réaliser des actions de selection qui déclenchent des actions spécifiées par les bindings contenus dans liste_commandes + Exemple de binding: + liste_commandes = (("",self.selectCmd), + ("",self.deselectCmd), + ("",self.defCmd)) + Il s'agit d'une liste de doublets dont le premier element est un evenement et le + deuxieme un callback a appeler sur l'evenement en question. + """ def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[], - active ='oui',filtre='non',titre=''): + active ='oui',filtre='non',titre='',optionReturn=None): self.parent = parent self.page = page self.liste_groupes = liste_groupes @@ -1087,6 +1129,7 @@ class ListeChoixParGroupes(ListeChoix) : self.active = active self.titre = titre self.filtre = filtre + self.optionReturn = optionReturn self.init() def affiche_liste(self): @@ -1120,14 +1163,43 @@ class ListeChoixParGroupes(ListeChoix) : window=label, stretch = 1) self.MCbox.insert(END,'\n') + + def null(*tp,**args): return + if self.active == 'oui': - label.bind(self.liste_commandes[0][0], - lambda e,s=self,c=self.liste_commandes[0][1],x=cmd,l=label : s.selectitem(x,l,c)) - label.bind(self.liste_commandes[1][0], - lambda e,s=self,c=self.liste_commandes[1][1],x=cmd,l=label : s.deselectitem(l,x,c)) - label.bind(self.liste_commandes[2][0], - lambda e,s=self,c=self.liste_commandes[2][1],x=cmd,l=label : s.chooseitem(x,l,c)) - label.bind("", self.selectNextItem(event)) + # Traitement par defaut des evenements + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.selectitem(x,l,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.deselectitem(l,x,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x)) + + # Si des callbacks sont definis on les utilise + for event,callback in self.liste_commandes: + if event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.selectitem(x,l,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.deselectitem(l,x,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x)) + else: + label.bind(event,lambda e,s=self,c=callback,x=cmd,l=label: c()) for marque in self.liste_marques: try: @@ -1138,12 +1210,68 @@ class ListeChoixParGroupes(ListeChoix) : self.MCbox.config(state=DISABLED) self.selection = None + def selectPrevItem(self,mot,label,callback,group,cmd): + g=self.liste_groupes.index(group) + liste_commandes=self.dict_groupes[group] + c=liste_commandes.index(cmd) + if c > 0: + co=liste_commandes[c-1] + else: + # debut de liste. On passe au groupe precedent + if g > 0: + gr=self.liste_groupes[g-1] + co=self.dict_groupes[gr][-1] + else: + # debut des groupes. On ne fait rien + return + + # On a trouve l'item precedent + self.clear_marque() + labelsuivant=self.dico_labels[co] + if self.selection != None : + self.deselectitem(self.selection[1],self.selection[0],self.selection[2],) + self.selection = (co,labelsuivant,self.selection[2]) + index = self.MCbox.index(labelsuivant) + self.MCbox.see(index) + self.arg_selected=co + self.highlightitem(labelsuivant) + labelsuivant.focus_set() + callback(co) + + def selectNextItem(self,mot,label,callback,group,cmd): + g=self.liste_groupes.index(group) + liste_commandes=self.dict_groupes[group] + c=liste_commandes.index(cmd) + try: + co=liste_commandes[c+1] + except: + # fin de liste. On passe au groupe suivant + try: + gr=self.liste_groupes[g+1] + co=self.dict_groupes[gr][0] + except: + # fin des groupes. On ne fait rien + return + # On a trouve l'item suivant + self.clear_marque() + labelsuivant=self.dico_labels[co] + if self.selection != None : + self.deselectitem(self.selection[1],self.selection[0],self.selection[2],) + self.selection = (co,labelsuivant,self.selection[2]) + index = self.MCbox.index(labelsuivant) + self.MCbox.see(index) + self.arg_selected=co + self.highlightitem(labelsuivant) + labelsuivant.focus_set() + callback(co) + def entry_changed(self,event=None): """ Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu de l'entry et frappe """ if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected]) + filtre = self.entry.get()+"*" FILTRE = string.upper(filtre) # @@ -1152,10 +1280,12 @@ class ListeChoixParGroupes(ListeChoix) : # for grp in self.liste_groupes: if fnmatch.fnmatch(grp,filtre) or fnmatch.fnmatch(grp,FILTRE) : + self.highlightitem(self.dico_labels[grp]) index = self.MCbox.index(self.dico_labels[grp]) self.MCbox.see(index) # On ne selectionne pas le groupe #self.arg_selected = grp + self.dico_labels[grp].focus_set() # On a trouve un groupe on arrete la recherche return @@ -1166,6 +1296,7 @@ class ListeChoixParGroupes(ListeChoix) : index = self.MCbox.index(self.dico_labels[cmd]) self.MCbox.see(index) self.arg_selected = cmd + self.dico_labels[self.arg_selected].focus_set() # On a trouve une commande on arrete la recherche return