"""
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)
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,
# 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):
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
é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:
# 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("<Key-Prior>", self.page_up)
self.zone_texte.bind("<Key-Next>", self.page_down)
self.zone_texte.bind("<Key-Up>", self.unit_up)
self.zone_texte.bind("<Key-Down>", self.unit_down)
- self.zone_texte.bind("<Double-Button-3>", 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)
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:
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
self.active = active
self.titre = titre
self.filtre = filtre
+ self.optionReturn = optionReturn
self.init()
def init(self):
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=[]
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`
window=label,
stretch = 1)
self.MCbox.insert(END,'\n')
+ if self.optionReturn != None :
+ label.bind("<Return>",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c))
+ label.bind("<Key-Right>",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))
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:
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)
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
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"""
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("<Key-Down>", self.selectNextItem(event))
for marque in self.liste_marques:
try: