X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Editeur%2Fwidgets.py;h=30cabe747566be78ea628ca33bea2c57554fe2fc;hb=1a558db360a84dcacd7bfaf1212ef75c6e4939fd;hp=228a54804b6e7655b9ccf4461bcfbf69020f9bf3;hpb=3e9d0381e340266ceaa2b7cebc141778f5a45897;p=tools%2Feficas.git diff --git a/Editeur/widgets.py b/Editeur/widgets.py index 228a5480..30cabe74 100644 --- a/Editeur/widgets.py +++ b/Editeur/widgets.py @@ -193,6 +193,11 @@ class FenetreDeSelection(Fenetre): """ def __init__(self,panel,item,appli,titre="",texte="",cardinal=1): Fenetre.__init__(self,appli,titre=titre,texte=texte) + self.frame_boutons.place_forget() + self.frame_texte.place_forget() + self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.8) + self.frame_boutons.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.) + self.cardinal=cardinal self.fenetre.configure(width = 320,height=400) centerwindow(self.fenetre) @@ -201,7 +206,7 @@ class FenetreDeSelection(Fenetre): self.fenetre.title(titre) self.but_save.configure(text="Ajouter",command=self.traite_selection) # séparateur par défaut - self.separateur = ";" + self.separateur = ';' # création de la zone de saisie du séparateur l_separateurs_autorises = self.get_separateurs_autorises() self.choix_sep = Pmw.ComboBox(self.frame_boutons, @@ -216,8 +221,11 @@ class FenetreDeSelection(Fenetre): # Replacement self.but_quit.place_forget() self.but_save.place_forget() - self.but_save.place(relx=0.6,rely=0.5,anchor='center') - self.but_quit.place(relx=0.8,rely=0.5,anchor='center') + self.but_all = Button(self.frame_boutons,text = "Tout Sélectionner", command=self.tout) + self.but_save.place(relx=0.6,rely=0.6,anchor='center') + self.but_quit.place(relx=0.8,rely=0.6,anchor='center') + self.but_all.place(relx=0.7,rely=0.2,anchor='center') + self.choose_separateur('espace') def get_separateurs_autorises(self): @@ -235,12 +243,23 @@ class FenetreDeSelection(Fenetre): else: self.separateur = nom_sep - def traite_selection(self): + def tout(self): + liste=[] + texte=self.texte.splitlines() + for l in texte : + for mot in string.split(l,self.separateur): + if mot != '' and mot != ' ' and mot != self.separateur : + liste.append(mot) + self.traite_selection(liste) + + def traite_selection(self,liste=None): """ Cette méthode effectue tous les traitements nécessaires pour vérifier et affecter la liste de valeurs à l'objet réprésenté par self.item """ # Récupère la liste des chaines de caractères de la zone sélectionnée - message,liste = self.recupere_liste() + message="" + if liste == None: + message,liste = self.recupere_liste() if self.test_probleme(message,"Sélectionnez des données") == 0: return # Vérifie que le nombre de données est dans les limites attendues @@ -358,7 +377,7 @@ class FenetreDeSelection(Fenetre): éléments dans le type voulu en cas de succès, sinon retourne None. """ liste_valeurs = [] - message = "" + message = "" for chaine in liste: if f_conversion: try: @@ -403,14 +422,13 @@ class FenetreDeParametre(Fenetre) : # définition des frames self.frame_texte = Frame(self.fenetre) - self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9) + self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.7) # définition de la zone texte et du scrollbar self.zone_texte = Text(self.frame_texte,font=fonte) self.zone_texte.bind("", self.page_up) self.zone_texte.bind("", self.page_down) self.zone_texte.bind("", self.unit_up) self.zone_texte.bind("", self.unit_down) - self.zone_texte.bind("", self.OnButton3doubleclick) self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview) self.scroll_v.pack(side='right',fill ='y') self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) @@ -419,7 +437,20 @@ class FenetreDeParametre(Fenetre) : self.affiche_texte(self.texte) self.zone_texte.config(state="disabled") - def OnButton3doubleclick(self,event): + # définition des boutons + self.frame_boutons = Frame(self.fenetre) + self.frame_boutons.place(relheight=0.3,relx=0,rely=0.65,relwidth=1.) + self.label1 = Label(self.frame_boutons,text="surligner la") + self.label2 = Label(self.frame_boutons,text="ligne entière") + self.label1.place(relx=0.1,rely=0) + self.label2.place(relx=0.1,rely=0.5) + self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit) + self.but_save = Button(self.frame_boutons,text = "Choisir",command = self.Choisir) + self.but_save.place(relx=0.6,rely=0,relheight=1) + self.but_quit.place(relx=0.8,rely=0,relheight=1) + + + def Choisir(self): try: selection=self.zone_texte.selection_get() except: @@ -637,7 +668,7 @@ class Formulaire: class ListeChoix : """ Cette classe est utilisée pour afficher une liste de choix passée en paramètre en passant les commandes à lancer suivant différents bindings """ - def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre=''): + def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre='',optionReturn=None): self.parent = parent self.page = page self.liste = liste @@ -649,6 +680,7 @@ class ListeChoix : self.active = active self.titre = titre self.filtre = filtre + self.optionReturn = optionReturn self.init() def init(self): @@ -685,6 +717,7 @@ class ListeChoix : self.MCbox.pack(fill='y',expand=1,padx=2,pady=2) self.MCbox.configure(yscrollcommand=self.MCscroll.set) + def affiche_liste(self): """ Affiche la liste dans la fenêtre""" liste_labels=[] @@ -699,17 +732,22 @@ class ListeChoix : elif type(objet) in (types.StringType,types.IntType): mot = objet elif type(objet) == types.FloatType : - #mot = repr_float(objet) - mot = str(objet) + mot = self.parent.get_valeur_texte(objet) + if mot == "" : + mot = str(objet) elif type(objet) == types.TupleType : mot="(" premier=1 for val in objet: - if (not premier): - mot=mot+"," - else: - premier=0 - mot=mot+str(val) + if (not premier): + mot=mot+"," + else: + premier=0 + valtexte = self.parent.get_valeur_texte(val) + if valtexte != "" : + mot=mot+valtexte + else: + mot=mot+str(val) mot=mot+")" else: mot=`objet` @@ -722,6 +760,9 @@ class ListeChoix : window=label, stretch = 1) 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,x=objet,l=label : s.selectNextItem(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)) @@ -736,6 +777,29 @@ class ListeChoix : self.MCbox.config(state=DISABLED) self.selection = None + def clear_marque(self): + try: + self.dico_labels[self.arg_selected].configure(bg='gray95',fg='black') + self.arg_selected = '' + except : + pass + + def surligne(self,marque): + try : + self.highlightitem(self.dico_labels[marque]) + self.arg_selected = marque + except: + pass + + def chooseitemsurligne(self,mot,label,commande): + """ Active la méthode de choix passée en argument""" + try: + mot=self.arg_selected + commande(mot) + except AsException,e: + raison=str(e) + showerror(raison.split('\n')[0],raison) + def chooseitem(self,mot,label,commande): """ Active la méthode de choix passée en argument""" try: @@ -744,9 +808,28 @@ class ListeChoix : raison=str(e) showerror(raison.split('\n')[0],raison) + def selectNextItem(self,mot,label): + try : + index=self.liste.index(mot) + indexsuivant=index+1 + 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]) + self.highlightitem(labelsuivant) + self.arg_selected=motsuivant + labelsuivant.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 et lance la commande associée au double-clic""" + self.clear_marque() if self.selection != None : self.deselectitem(self.selection[1],self.selection[0],self.selection[2],) self.highlightitem(label) @@ -792,6 +875,10 @@ class ListeChoix : self.MCbox.see(index) self.arg_selected = arg break + try : + self.dico_labels[self.arg_selected].focus_set() + except : + pass def get_liste_old(self): return self.liste @@ -813,7 +900,7 @@ class ListeChoix : def put_liste(self,liste): self.liste = liste self.affiche_liste() - + class Affichage : """ Cette classe permet d'afficher au lancement d'EFICAS le message d'attente et la barre de progression""" @@ -1044,6 +1131,7 @@ class ListeChoixParGroupes(ListeChoix) : 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)) for marque in self.liste_marques: try: