- self.but_save.configure(text="Ajouter",command=self.traite_selection)\r
- # séparateur par défaut\r
- self.separateur = ";"\r
- # création de la zone de saisie du séparateur\r
- l_separateurs_autorises = self.get_separateurs_autorises()\r
- self.choix_sep = Pmw.ComboBox(self.frame_boutons,\r
- label_text = "Séparateur :",\r
- labelpos = 'w',\r
- listheight = 100,\r
- selectioncommand = self.choose_separateur,\r
- scrolledlist_items = l_separateurs_autorises)\r
- self.choix_sep.component('entry').configure(width=6)\r
- self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')\r
- self.choix_sep.selectitem(self.separateur)\r
- # Replacement\r
- self.but_quit.place_forget()\r
- self.but_save.place_forget()\r
- self.but_save.place(relx=0.6,rely=0.5,anchor='center')\r
- self.but_quit.place(relx=0.8,rely=0.5,anchor='center')\r
-\r
- def get_separateurs_autorises(self):\r
- """\r
- Retourne la liste des séparateurs autorisés\r
- """\r
- return ['espace',';',',']\r
-\r
- def choose_separateur(self,nom_sep):\r
- """\r
- Affecte à self.separateur le caractère séparateur correspondant à nom_sep\r
- """\r
- if nom_sep == 'espace' :\r
- self.separateur = ' '\r
- else:\r
- self.separateur = nom_sep\r
- \r
- def traite_selection(self):\r
- """ Cette méthode effectue tous les traitements nécessaires pour vérifier\r
- et affecter la liste de valeurs à l'objet réprésenté par self.item\r
- """\r
- # Récupère la liste des chaines de caractères de la zone sélectionnée\r
- message,liste = self.recupere_liste()\r
- if self.test_probleme(message,"Sélectionnez des données") == 0:\r
- return\r
- # Vérifie que le nombre de données est dans les limites attendues\r
- message = self.verif_liste(liste)\r
- if self.test_probleme(message,"Vérifiez le nombre de données") == 0:\r
- return\r
- # Crée une liste de valeurs du type attendu\r
- message,liste_valeurs = self.creation_liste_valeurs(liste)\r
- if self.test_probleme(message,"Vérifiez le type des données") == 0:\r
- return\r
- # Vérifie que chaque valeur est dans le domaine exigé\r
- message = self.verif_valeurs(liste_valeurs)\r
- if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0:\r
- return\r
- # Ajoute les valeurs dans la liste de valeurs du mot-clé\r
- self.ajouter_valeurs(liste_valeurs)\r
- self.appli.affiche_infos("Liste de valeurs acceptée")\r
-\r
- def test_probleme(self, message, message_eficas):\r
- """ Cette méthode affiche un message d'erreur si message != ''\r
- et retourne 0, sinon retourne 1 sans rien afficher.\r
- """\r
- if message != "":\r
- showinfo("Problème",message)\r
- self.fenetre.tkraise()\r
- self.appli.affiche_infos(message_eficas)\r
- return 0\r
- else:\r
- return 1\r
-\r
- def recupere_liste(self):\r
- """ Cette méthode récupère le texte de la zone sélectionnée, construit et\r
- retourne une liste avec les chaines qui se trouvent entre les séparateurs.\r
- S'il n'y a pas de données selectionnées, elle retourne un message d'erreur\r
- et une liste vide.\r
- """\r
- message = ""\r
- try:\r
- selection=self.fenetre.selection_get()\r
- except:\r
- message = "Pas de donnée sélectionnée"\r
- return message,None\r
- # les retours chariots doivent être interprétés comme des séparateurs\r
- selection = string.replace(selection,'\n',self.separateur)\r
- # on splitte la sélection suivant le caractère séparateur\r
- liste_chaines = string.split(selection,self.separateur)\r
- l_chaines = []\r
- for chaine in liste_chaines:\r
- chaine = string.strip(chaine)\r
- if chaine != '' : l_chaines.append(chaine)\r
- return message,l_chaines\r
-\r
- def verif_liste(self, liste):\r
- """ Cette méthode effectue des tests sur le nombre d'éléments de la liste\r
- et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur\r
- correspondant.\r
- """\r
- message = ""\r
- # nombre d'éléments sélectionnés\r
- nombre_elements = len(liste)\r
- # nombre d'éléments déja dans la liste du panel\r
- nombre_in_liste = len(self.panel.Liste_valeurs.get_liste())\r
- multiplicite = self.item.GetMultiplicite()\r
- if (nombre_elements % multiplicite) != 0:\r
- message = "Vous devez sélectionner "+str(multiplicite)+" * n données"\r
- return message\r
- nombre_valeurs = nombre_elements / multiplicite\r
- cardinalite = self.item.GetMinMax()\r
- if nombre_valeurs < cardinalite[0]:\r
- message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs"\r
- return message\r
- if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste):\r
- message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs"\r
- return message\r
-\r
- return message\r
-\r
- def creation_liste_valeurs(self, liste):\r
- """ Cette méthode crée et retourne une liste de valeurs du type attendu\r
- par le mot-clé. La liste de valeurs est créée à partir de la liste\r
- de chaines de caractères transmise.\r
- """\r
- type_attendu = self.item.GetType()[0]\r
- if type_attendu == 'R':\r
- return self.convertir(liste, f_conversion= float)\r
- elif type_attendu == 'I':\r
- return self.convertir(liste, f_conversion= int)\r
- elif type_attendu == 'TXM':\r
- return self.convertir(liste)\r
- else:\r
- message = "Seuls les entiers, les réels et les chaines de caractères sont convertis"\r
- return message,None\r
-\r
- def convertir(self, liste, f_conversion=None):\r
- """ Cette méthode essaie de convertir les éléments de la liste avec la\r
- fonction f_conversion si elle existe, et retourne la liste des\r
- éléments dans le type voulu en cas de succès, sinon retourne None.\r
- """\r
- liste_valeurs = []\r
- message = ""\r
- for chaine in liste:\r
- if f_conversion:\r
- try:\r
- liste_valeurs.append(f_conversion(chaine))\r
- except:\r
- message = "Impossible de convertir "+chaine+" dans le type attendu"\r
- return message,None\r
- else:\r
- liste_valeurs.append(chaine)\r
- return message,liste_valeurs\r
-\r
- def verif_valeurs(self, liste_valeurs):\r
- """ Cette méthode teste tous les éléments de la liste, et retourne 1 si chaque\r
- élément est dans le domaine voulu.\r
- """\r
- message = ""\r
- for valeur in liste_valeurs:\r
- test = self.item.IsInIntervalle(valeur)\r
- if test == 0:\r
- intervalle = str(self.item.GetIntervalle()[0])+","+str(self.item.GetIntervalle()[1])\r
- message = "La valeur "+str(valeur)+" n'est pas dans l'intervalle ["+intervalle+"]"\r
- return message\r
- return message\r
-\r
- def ajouter_valeurs(self, liste_valeurs):\r
- """ Cette méthode ajoute les nouvelles valeurs à la liste existante."""\r
- liste = self.panel.Liste_valeurs.get_liste()\r
- liste.extend(liste_valeurs)\r
+ self.but_save.configure(text="Ajouter",command=self.traite_selection)
+ # séparateur par défaut
+ 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,
+ label_text = "Séparateur :",
+ labelpos = 'w',
+ listheight = 100,
+ selectioncommand = self.choose_separateur,
+ scrolledlist_items = l_separateurs_autorises)
+ self.choix_sep.component('entry').configure(width=6)
+ self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')
+ self.choix_sep.selectitem(self.separateur)
+ # Replacement
+ self.but_quit.place_forget()
+ self.but_save.place_forget()
+ 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):
+ """
+ Retourne la liste des séparateurs autorisés
+ """
+ return ['espace',';',',']
+
+ def choose_separateur(self,nom_sep):
+ """
+ Affecte à self.separateur le caractère séparateur correspondant à nom_sep
+ """
+ if nom_sep == 'espace' :
+ self.separateur = ' '
+ else:
+ self.separateur = nom_sep
+
+ 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=""
+ 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
+ message = self.verif_liste(liste)
+ if self.test_probleme(message,"Vérifiez le nombre de données") == 0:
+ return
+ # Crée une liste de valeurs du type attendu
+ message,liste_valeurs = self.creation_liste_valeurs(liste)
+ if self.test_probleme(message,"Vérifiez le type des données") == 0:
+ return
+ # Vérifie que chaque valeur est dans le domaine exigé
+ message = self.verif_valeurs(liste_valeurs)
+ if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0:
+ return
+ # Ajoute les valeurs dans la liste de valeurs du mot-clé
+ if self.cardinal != 1 :
+ nb=self.cardinal
+ l_valeurs=[]
+ # a ameliorer
+ if (len(liste_valeurs)%nb != 0):
+ message="La cardinalité n'est pas correcte"
+ self.test_probleme(message,"On attend des tuples")
+ return
+ for i in range(len(liste_valeurs)/nb) :
+ if (nb==2):
+ t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1])
+ elif (nb ==3):
+ t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1], liste_valeurs[i*nb+2])
+ else :
+ print "probleme : prevenir la maintenance Eficas"
+ return
+ l_valeurs.append(t)
+ liste_valeurs=l_valeurs
+ self.ajouter_valeurs(liste_valeurs)
+ self.appli.affiche_infos("Liste de valeurs acceptée")
+
+ def test_probleme(self, message, message_eficas):
+ """ Cette méthode affiche un message d'erreur si message != ''
+ et retourne 0, sinon retourne 1 sans rien afficher.
+ """
+ if message != "":
+ showinfo("Problème",message)
+ self.fenetre.tkraise()
+ self.appli.affiche_infos(message_eficas)
+ return 0
+ else:
+ return 1
+
+ def recupere_liste(self):
+ """ Cette méthode récupère le texte de la zone sélectionnée, construit et
+ retourne une liste avec les chaines qui se trouvent entre les séparateurs.
+ S'il n'y a pas de données selectionnées, elle retourne un message d'erreur
+ et une liste vide.
+ """
+ message = ""
+ try:
+ selection=self.fenetre.selection_get()
+ except:
+ message = "Pas de donnée sélectionnée"
+ return message,None
+ # les retours chariots doivent être interprétés comme des séparateurs
+ selection = string.replace(selection,'\n',self.separateur)
+ # on splitte la sélection suivant le caractère séparateur
+ liste_chaines = string.split(selection,self.separateur)
+ l_chaines = []
+ for chaine in liste_chaines:
+ chaine = string.strip(chaine)
+ if chaine != '' : l_chaines.append(chaine)
+ return message,l_chaines
+
+ def verif_liste(self, liste):
+ """ Cette méthode effectue des tests sur le nombre d'éléments de la liste
+ et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur
+ correspondant.
+ """
+ message = ""
+ # nombre d'éléments sélectionnés
+ nombre_elements = len(liste)
+ # nombre d'éléments déja dans la liste du panel
+ nombre_in_liste = len(self.panel.Liste_valeurs.get_liste())
+ multiplicite = self.item.GetMultiplicite()
+ if (nombre_elements % multiplicite) != 0:
+ message = "Vous devez sélectionner "+str(multiplicite)+" * n données"
+ return message
+ nombre_valeurs = nombre_elements / multiplicite
+ cardinalite = self.item.GetMinMax()
+ if nombre_valeurs < cardinalite[0]:
+ message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs"
+ return message
+ if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste):
+ message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs"
+ return message
+
+ return message
+
+ def creation_liste_valeurs(self, liste):
+ """ Cette méthode crée et retourne une liste de valeurs du type attendu
+ par le mot-clé. La liste de valeurs est créée à partir de la liste
+ de chaines de caractères transmise.
+ """
+ type_attendu = self.item.GetType()[0]
+ if type_attendu == 'R':
+ return self.convertir(liste, f_conversion= float)
+ elif type_attendu == 'I':
+ return self.convertir(liste, f_conversion= int)
+ elif type_attendu == 'TXM':
+ return self.convertir(liste)
+ else:
+ message = "Seuls les entiers, les réels et les chaines de caractères sont convertis"
+ return message,None
+
+ def convertir(self, liste, f_conversion=None):
+ """ Cette méthode essaie de convertir les éléments de la liste avec la
+ fonction f_conversion si elle existe, et retourne la liste des
+ éléments dans le type voulu en cas de succès, sinon retourne None.
+ """
+ liste_valeurs = []
+ message = ""
+ for chaine in liste:
+ if f_conversion:
+ try:
+ liste_valeurs.append(f_conversion(chaine))
+ except:
+ message = "Impossible de convertir "+chaine+" dans le type attendu"
+ return message,None
+ else:
+ liste_valeurs.append(chaine)
+ return message,liste_valeurs
+
+ def verif_valeurs(self, liste_valeurs):
+ """ Cette méthode teste tous les éléments de la liste, et retourne 1 si chaque
+ élément est dans le domaine voulu.
+ """
+ message = ""
+ for valeur in liste_valeurs:
+ test = self.item.IsInIntervalle(valeur)
+ if test == 0:
+ intervalle = str(self.item.GetIntervalle()[0])+","+str(self.item.GetIntervalle()[1])
+ message = "La valeur "+str(valeur)+" n'est pas dans l'intervalle ["+intervalle+"]"
+ return message
+ return message
+
+ def ajouter_valeurs(self, liste_valeurs):
+ """ Cette méthode ajoute les nouvelles valeurs à la liste existante."""
+ liste = self.panel.Liste_valeurs.get_liste()
+ liste.extend(liste_valeurs)