Salome HOME
PN bug notation scientifique
[tools/eficas.git] / Editeur / widgets.py
index 228a54804b6e7655b9ccf4461bcfbf69020f9bf3..30cabe747566be78ea628ca33bea2c57554fe2fc 100644 (file)
@@ -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("<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)
@@ -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("<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))
@@ -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("<Key-Down>", self.selectNextItem(event))
 
         for marque in self.liste_marques:
            try: