Salome HOME
bug sur un mesage dans une exception sur un validator (cf JPA)
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursTuple.py
index 50bfbd48e73288997212d7f60f024e28fb5d05f4..9899faab121f014969de0dbbb1fdd6ef1f4d3cca 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2013   EDF R&D
+# Copyright (C) 2007-2021   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 # Modules Python
-import string,types,os,sys
-
-# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5:
-    from PyQt5.QtWidgets  import QFrame,QApplication, QFrame, QWidget
-    from PyQt5.QtGui  import QIcon
-    from PyQt5.QtCore  import QSize, Qt
-else :
-    from PyQt4.QtGui  import *
-    from PyQt4.QtCore import *
+from __future__ import absolute_import
+try :
+    from builtins import str
+    from builtins import range
+    from builtins import object
+except : pass
+
+import types,os,sys
+
+from six.moves import range
+from PyQt5.QtWidgets  import QFrame,QApplication, QFrame, QWidget
+from PyQt5.QtGui      import QIcon
+from PyQt5.QtCore     import QSize, Qt, QTimer
 
 from Extensions.i18n import tr
 
 
-from feuille               import Feuille
-from politiquesValidation  import PolitiquePlusieurs
-from qtSaisie              import SaisieValeur
-from gereListe             import GereListe
-from gereListe             import LECustom
-from Tuple2                import Ui_Tuple2
-from Tuple3                import Ui_Tuple3
-
-
-class TupleCustom :
-  def __init__(self,tailleTuple,parent,parentQt,index):
-      QWidget.__init__(self,parent)
-      self.setupUi(self)
-      self.tailleTuple=tailleTuple
-      self.parent=parent
-      self.parentQt=parentQt
-      self.valeur=None
-      self.index=index
-
-
-      for i in range(self.tailleTuple):
-         nomLE="lineEditVal_"+str(i+1)
-         courant=getattr(self,nomLE)
-         courant.num=index
-         courant.dansUnTuple=True
-         if monEnvQT5 : courant.returnPressed.connect(self.valueChange)
-         else : self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
-
-
-  def valueChange(self):
-      listeVal=[]
-    
-      for i in range(self.tailleTuple):
-         nomLE="lineEditVal_"+str(i+1)
-         courant=getattr(self,nomLE)
-         val=str(courant.text())
-         if str(val)=="" or val==None : 
-            courant.setFocus()
-            return
-         try :
-             valeur=eval(val,{})
-         except :
-           try :
-             d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
-             valeur=eval(val,d)
-           except :
-             valeur=val
-         listeVal.append(valeur)
-      self.valeur=listeVal
-      self.parentQt.changeValeur()
-
-
-  def setValeur(self,value):
-      listeVal=[]
-      valeurNulle=True
-      for i in range(self.tailleTuple):
-         nomLE="lineEditVal_"+str(i+1)
-         courant=getattr(self,nomLE)
-         try :
-           if str(value[i]) != "" : valeurNulle=False
-         except :
-           pass
-
-         try :
-           courant.setText(str(value[i]))
-         except :
-           courant.setText("")
-         val=str(courant.text())
-         try :
-           valeur=eval(val,{})
-         except :
-           try :
-             d=self.parentQt.objSimp.jdc.get_contexte_avant(self.parentQt.objSimp. etape)
-             valeur=eval(val,d)
-           except :
-             valeur=val
-         listeVal.append(valeur)
-      if  valeurNulle == True : self.valeur=None
-      else                    : self.valeur=listeVal
-
-  def getValeur(self):
-      return self.valeur
-
-  def text(self):
-      return self.valeur
-
-  def setText(self,value):
-      self.setValeur(value)
-
-  def clean(self):
-      self.valeur=None
-      for i in range(self.tailleTuple):
-         nomLE="lineEditVal_"+str(i+1)
-         courant=getattr(self,nomLE)
-         courant.setText("")
-
-  def finCommentaire(self):
+from InterfaceQT4.feuille               import Feuille
+from InterfaceQT4.politiquesValidation  import PolitiquePlusieurs
+from InterfaceQT4.qtSaisie              import SaisieValeur
+from InterfaceQT4.gereListe             import GereListe
+from InterfaceQT4.gereListe             import LECustom
+from Tuple2                             import Ui_Tuple2
+from Tuple3                             import Ui_Tuple3
+from Tuple4                             import Ui_Tuple4
+from Tuple5                             import Ui_Tuple5
+from Tuple6                             import Ui_Tuple6
+from Tuple7                             import Ui_Tuple7
+from Tuple8                             import Ui_Tuple8
+from Tuple9                             import Ui_Tuple9
+from Tuple10                            import Ui_Tuple10
+
+
+#--------------------------
+class TupleCustom(object) :
+#--------------------------
+
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------------------------------------
+        QWidget.__init__(self,parent)
+        self.setupUi(self)
+        self.tailleTuple=tailleTuple
+        self.parent=parent
+        self.parentQt=parentQt
+        self.valeur=[]
+        self.index=index
+        self.inFocusOutEvent=False
+
+
+        for i in range(self.tailleTuple):
+            nomLE="lineEditVal"+str(i+1)
+            courant=getattr(self,nomLE)
+            courant.num=index
+            courant.dansUnTuple=True
+            courant.returnPressed.connect(self.valueChange)
+            courant.numDsLaListe = i+1
+            courant.tupleCustomParent=self
+            courant.parentTuple = self
+
+
+    def valueChange(self):
+    #----------------------
+
+        listeVal=[]
+        for i in range(self.tailleTuple):
+            nomLE="lineEditVal"+str(i+1)
+            courant=getattr(self,nomLE)
+            val=str(courant.text())
+
+            if str(val)=="" or val==None :
+                if not self.inFocusOutEvent : courant.setFocus()
+                return
+
+            try :
+                valeur=eval(val,{})
+            except :
+                try :
+                    d=self.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
+                    valeur=eval(val,d)
+                except :
+                    valeur=val
+            listeVal.append(valeur)
+        self.valeur=listeVal
+        self.parentQt.changeValeur()
+
+
+    def setValeur(self,value):
+    #----------------------
+
+        listeVal=[]
+        valeurNulle=True
+        for i in range(self.tailleTuple):
+            nomLE="lineEditVal"+str(i+1)
+            courant=getattr(self,nomLE)
+            try :
+                if str(value[i]) != "" : valeurNulle=False
+            except :
+                pass
+
+            try :
+                courant.setText(str(value[i]))
+            except :
+                courant.setText("")
+            val=str(courant.text())
+            try :
+                valeur=eval(val,{})
+            except :
+                try :
+                    d=self.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
+                    valeur=eval(val,d)
+                except :
+                    valeur=val
+            listeVal.append(valeur)
+        if  valeurNulle == True : self.valeur=None
+        else                    : self.valeur=listeVal
+
+    def getValeurbad(self):
+    #----------------------
+        self.valeur=[]
+        vide=True
+        print (self.tailleTuple)
+        for i in range(self.tailleTuple):
+            nomLE="lineEditVal"+str(i+1)
+            courant=getattr(self,nomLE)
+            self.valeur.append(courant.valeur)
+            if courant.valeur!= None : vide = False
+        if vide : self.valeur=[]
+        return self.valeur
+
+    def getValeur(self):
+    #----------------------
+        return self.valeur
+
+
+    def text(self):
+    #--------------
+        return self.valeur
+
+    def setText(self,value):
+    #-----------------------
+        self.setValeur(value)
+
+    def clean(self):
+    #-------------------
+        self.valeur=None
+        for i in range(self.tailleTuple):
+            nomLE="lineEditVal"+str(i+1)
+            courant=getattr(self,nomLE)
+            courant.setText("")
+
+    def finCommentaire(self):
+    #-------------------
         return self.finCommentaireListe()
 
 
+#-------------------------------------------------
 class TupleCustom2(QWidget,Ui_Tuple2,TupleCustom):
-  def __init__(self,tailleTuple,parent,parentQt,index):
-      TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
-
-class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
-  def __init__(self,tailleTuple,parent,parentQt,index):
-      TupleCustom. __init__(self,tailleTuple,parent,parentQt,index)
-      
-# ---------------------------- #
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+        if self.parentQt.editor.maConfiguration.closeParenthese :
+            self.label_5.close()
+            self.label_7.close()
 
 
+#-------------------------------------------------
+class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom):
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+
+#-------------------------------------------------
+class TupleCustom4(QWidget,Ui_Tuple4,TupleCustom):
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+
+#-------------------------------------------------
+class TupleCustom5(QWidget,Ui_Tuple5,TupleCustom):
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+
+#-------------------------------------------------
+class TupleCustom6(QWidget,Ui_Tuple6,TupleCustom):
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+
+#-------------------------------------------------
+class TupleCustom7(QWidget,Ui_Tuple7,TupleCustom):
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+
+#-------------------------------------------------
+class TupleCustom8(QWidget,Ui_Tuple8,TupleCustom):
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+
+#-------------------------------------------------
+class TupleCustom9(QWidget,Ui_Tuple9,TupleCustom):
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+
+#-------------------------------------------------
+class TupleCustom10(QWidget,Ui_Tuple10,TupleCustom):
+#-------------------------------------------------
+    def __init__(self,tailleTuple,parent,parentQt,index):
+    #-------------------
+        TupleCustom.__init__(self,tailleTuple,parent,parentQt,index)
+        if self.parentQt.editor.maConfiguration.closeParenthese :
+            self.label_5.close()
+            self.label_7.close()
+
+
+
+
+
+# -------------------------------------------- #
 class MonWidgetPlusieursTuple(Feuille,GereListe):
+# -------------------------------------------- #
+
+    def __init__(self, node, monSimpDef, nom, objSimp, parentQt, commande):
+    #-----------------------------------------------------
 
-  def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
         self.indexDernierLabel=0
+        self.numLineEditEnCours=0
         self.nomLine="TupleVal"
         self.listeAffichageWidget=[]
         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
@@ -155,206 +263,283 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
         self.finCommentaireListe()
         self.politique=PolitiquePlusieurs(self.node,self.editor)
         self.parentQt.commandesLayout.insertWidget(-1,self)
-        if sys.platform[0:5]!="linux":
-          repIcon=self.node.editor.appliEficas.repIcon
-          fichier=os.path.join(repIcon, 'arrow_up.png')
-          icon = QIcon(fichier)
-          self.RBHaut.setIcon(icon)
-          self.RBHaut.setIconSize(QSize(32, 32))
-          fichier2=os.path.join(repIcon, 'arrow_down.png')
-          icon2 = QIcon(fichier2)
-          self.RBBas.setIcon(icon2)
-          fichier3=os.path.join(repIcon, 'file-explorer.png')
-          icon3 = QIcon(fichier3)
-          self.BSelectFichier.setIcon(icon3)
-          self.BSelectFichier.setIconSize(QSize(32, 32))
-        if monEnvQT5 :
-          self.BSelectFichier.clicked.connect(self.selectInFile)
+
+        #if sys.platform[0:5]!="linux":
+        if 1 :
+        #Pour MT
+            repIcon=self.node.editor.appliEficas.repIcon
+            fichier=os.path.join(repIcon, 'arrow_up.png')
+            icon = QIcon(fichier)
+            self.RBHaut.setIcon(icon)
+            self.RBHaut.setIconSize(QSize(32, 32))
+            fichier2=os.path.join(repIcon, 'arrow_down.png')
+            icon2 = QIcon(fichier2)
+            self.RBBas.setIcon(icon2)
+            fichier3=os.path.join(repIcon, 'file-explorer.png')
+            icon3 = QIcon(fichier3)
+            self.BSelectFichier.setIcon(icon3)
+            self.BSelectFichier.setIconSize(QSize(32, 32))
+        self.BSelectFichier.clicked.connect(self.selectInFile)
+
+
+
+
+    def ajoutLineEdit(self,valeur=None,inInit=False):
+    #------------------------------------------------
+        self.indexDernierLabel=self.indexDernierLabel+1
+        nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+        if hasattr(self,nomLineEdit) :
+            self.indexDernierLabel=self.indexDernierLabel-1
+            return
+
+        nomCustomTuple='TupleCustom'+str(self.nbValeurs)
+        laClasseDuTuple=globals()[nomCustomTuple]
+        nouveauLE=laClasseDuTuple(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
+
+        #if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
+        #else                   : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
+
+        self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
+        setattr(self,nomLineEdit,nouveauLE)
+        if valeur != None : nouveauLE.setValeur(valeur)
+
+        for i in range(self.nbValeurs) :
+            num=i+1
+            nomLineEdit='lineEditVal'+str(num)
+            lineEditVal=getattr(nouveauLE,nomLineEdit)
+            self.listeAffichageWidget.append(lineEditVal)
+        #self.listeAffichageWidget.append(nouveauLE.lineEditVal1)
+        #self.listeAffichageWidget.append(nouveauLE.lineEditVal2)
+        #if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal3)
+
+        self.etablitOrdre()
+
+        # deux lignes pour que le ensureVisible fonctionne
+        self.estVisible=nouveauLE.lineEditVal1
+        if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
+
+    def etablitOrdre(self):
+    # ---------------------
+        i=0
+        while(i +1 < len(self.listeAffichageWidget)):
+            self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
+            self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
+            i=i+1
+
+
+    def setValeurs(self):
+    # ---------------------
+        if self.editor.code == 'PSEN' : self.RBListePush()
+        valeurs=self.node.item.getValeur()
+        min,max=self.node.item.getMinMax()
+        if max == "**" or max > 8 : aCreer= 8
+        else : aCreer=max
+
+        if valeurs == () or valeurs == None :
+            for i in range(aCreer): self.ajoutLineEdit(inInit=True)
+            return
+
+        for v in valeurs:
+            self.ajoutLineEdit(v,inInit=True)
+
+        for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
+
+    def rendVisibleLigne(self):
+    # -------------------------
+        QApplication.processEvents()
+        self.estVisible.setFocus(True)
+        self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
+
+
+    def changeValeur(self,changeDePlace=False,oblige=True):
+    # -----------------------------------------------------
+        #Pour compatibilite signature
+        #print ('dschangeValeur', self.indexDernierLabel)
+
+        aLeFocus=self.focusWidget()
+        listeComplete=[]
+        libre=False
+        #print (self.indexDernierLabel)
+        for i in range(self.indexDernierLabel) :
+            nom=self.nomLine+str(i+1)
+            courant=getattr(self,nom)
+            valeurTuple=courant.valeur
+            if valeurTuple == None or valeurTuple== "" or valeurTuple==[]:
+                libre=True
+                continue
+            validite,comm,comm2,listeRetour= self.politique.ajoutTuple(valeurTuple,listeComplete)
+            if not validite:
+                if comm2 != '' : comm += " " + comm2
+                self.editor.afficheInfos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
+                return
+            listeComplete.append(tuple(courant.valeur))
+        #print ('listeComplete', listeComplete)
+        if listeComplete == [] : listeComplete=None
+        self.node.item.setValeur(listeComplete)
+
+        if changeDePlace : return
+        min,max=self.node.item.getMinMax()
+        if self.indexDernierLabel == max  : self.editor.afficheInfos(tr('Nb maximum de valeurs atteint'))
+        if self.indexDernierLabel < max and libre==False :
+            self.ajoutLineEdit()
+            self.listeAffichageWidget[-2].setFocus(True)
         else :
-          self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
-          
-        
-
-
-  def ajoutLineEdit(self,valeur=None,inInit=False):
-      self.indexDernierLabel=self.indexDernierLabel+1
-      nomLineEdit=self.nomLine+str(self.indexDernierLabel)
-      if hasattr(self,nomLineEdit) :
-         self.indexDernierLabel=self.indexDernierLabel-1
-         return
-
-      if self.nbValeurs == 2 : nouveauLE = TupleCustom2(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
-      else                   : nouveauLE = TupleCustom3(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
-                 
-      self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
-      setattr(self,nomLineEdit,nouveauLE)
-      if valeur != None : nouveauLE.setValeur(valeur)
-
-      self.listeAffichageWidget.append(nouveauLE.lineEditVal_1)
-      self.listeAffichageWidget.append(nouveauLE.lineEditVal_2)
-      if self.nbValeurs == 3 : self.listeAffichageWidget.append(nouveauLE.lineEditVal_3)
-      self.etablitOrdre()
-
-      # deux lignes pour que le ensureVisible fonctionne
-      self.estVisible=nouveauLE.lineEditVal_1
-      if inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
-
-  def etablitOrdre(self):
-      i=0
-      while(i +1 < len(self.listeAffichageWidget)):
-         self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
-         self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
-         i=i+1
-
-
-  def setValeurs(self):
-       self.RBListePush()
-       valeurs=self.node.item.get_valeur()
-       min,max=self.node.item.GetMinMax()
-       if max == "**" or max > 5 : aCreer=5
-       else : aCreer=max 
-
-       if valeurs == () or valeurs == None :
-          for i in range(aCreer): self.ajoutLineEdit(inInit=True)
-          return
-
-       for v in valeurs:
-           self.ajoutLineEdit(v,inInit=True)
-
-       for i in range(len(valeurs),aCreer) : self.ajoutLineEdit(inInit=True)
-
-  def rendVisibleLigne(self):
-      QApplication.processEvents()
-      self.estVisible.setFocus(True)
-      self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
-
-   
-  def changeValeur(self,changeDePlace=False,oblige=True):
-      #Pour compatibilite signature
-      aLeFocus=self.focusWidget()
-      listeComplete=[]
-
-      libre=False
-      for i in range(self.indexDernierLabel) :
-          nom=self.nomLine+str(i+1)
-          courant=getattr(self,nom)
-          valeurTuple=courant.valeur
-          if valeurTuple == None or valeurTuple== "": 
-             libre=True
-             continue
-          validite,comm,comm2,listeRetour= self.politique.AjoutTuple(valeurTuple,listeComplete)
-          if not validite:
-             if comm2 != '' : comm += " " + comm2
-             self.editor.affiche_infos(comm+" "+str(self.objSimp.definition.validators.typeDesTuples),Qt.red)
-             return
-          listeComplete.append(tuple(courant.valeur))
-      if listeComplete == [] : listeComplete=None
-      self.node.item.set_valeur(listeComplete)
-
-      if changeDePlace : return
-      min,max=self.node.item.GetMinMax()
-      if self.indexDernierLabel == max  : self.editor.affiche_infos(tr('Nb maximum de valeurs atteint'))
-      if self.indexDernierLabel < max and libre==False :
-          self.ajoutLineEdit()
-          self.listeAffichageWidget[-2].setFocus(True)
-      else :
-         try :
-           QApplication.processEvents()
-           w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
-           w.setFocus(True)
-           self.scrollArea.ensureWidgetVisible(w,0,0)
-         except :
-           pass
-          
-  def ajoutNValeur(self,liste):
+            try :
+                QApplication.processEvents()
+                w=self.listeAffichageWidget[self.listeAffichageWidget.index(aLeFocus)+1]
+                w.setFocus(True)
+                self.scrollArea.ensureWidgetVisible(w,0,0)
+            except :
+                pass
+
+    def echange(self,num1,num2):
+        # on donne le focus au a celui ou on a bouge
+        # par convention le 2
+        nomLineEdit=self.nomLine+str(num1)
+        courant=getattr(self,nomLineEdit)
+        valeurAGarder=courant.getValeur()
+        nomLineEdit2=self.nomLine+str(num2)
+        courant2=getattr(self,nomLineEdit2)
+        courant.setText(courant2.text())
+        courant2.setText(valeurAGarder)
+        self.changeValeur(changeDePlace=True)
+        self.numLineEditEnCours=num2
+        self.lineEditEnCours=courant2
+        courant2.lineEditVal1.setFocus(True)
+
+    def ajoutNValeur(self,liste):
+    #----------------------------
+    # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
+    # car alors le temps de verification devient prohibitif  reconstructu=ion et verification a
+    # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
+
         if len(liste)%self.nbValeurs != 0 :
-           texte="Nombre incorrect de valeurs"
-           self.editor.affiche_infos(tr(texte),Qt.red)
+            texte="Nombre incorrect de valeurs"
+            self.editor.afficheInfos(tr(texte),Qt.red)
+            return
+
         i=0
-        min,max=self.node.item.GetMinMax()
-        if self.objSimp.valeur == None : l = len(liste) and self.objSimp.valeur
-        else : l = len(liste)+len(self.objSimp.valeur)
-        if l > max : 
-           texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
-           self.editor.affiche_infos(texte,Qt.red)
-           return
+        longueur=len(liste)//self.nbValeurs
+        increment=self.nbValeurs
+        listeFormatee=[liste[k*increment:(k+1)*increment] for k in range(longueur)]
+        listeFormatee=tuple(listeFormatee)
+
+        min,max=self.node.item.getMinMax()
+        if self.objSimp.valeur == None : listeComplete=listeFormatee
+        else : listeComplete =self.objSimp.valeur + listeFormatee
+
+        if len(listeComplete) > max :
+            texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
+            self.editor.afficheInfos(texte,Qt.red)
+            return
+
+        validite,comm,comm2,listeRetour= self.politique.ajoutNTuple(listeComplete)
+        if not validite :
+            self.editor.afficheInfos(comm+comm2,Qt.red)
+            return
+
+        # on calcule le dernier lineedit rempli avant de changer la valeur
+        if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
+        else : indexDernierRempli=0
+
+        self.politique.recordValeur(listeComplete)
+
         while ( i < len(liste) ) :
-            if self.objSimp.valeur != None : indexDernierRempli=len(self.objSimp.valeur)
-            else : indexDernierRempli=0
             try :
-              t=tuple(liste[i:i+self.nbValeurs])
-              i=i+self.nbValeurs
+                t=tuple(liste[i:i+self.nbValeurs])
             except:
-              t=tuple(liste[i:len(liste)])
+                t=tuple(liste[i:len(liste)])
+            i=i+self.nbValeurs
             if indexDernierRempli < self.indexDernierLabel:
-               nomLineEdit=self.nomLine+str(indexDernierRempli+1)
-               LEARemplir=getattr(self,nomLineEdit) 
-               LEARemplir.lineEditVal_1.setText(str(t[0]))
-               LEARemplir.lineEditVal_2.setText(str(t[1]))
-               if self.nbValeurs== 3 : LEARemplir.lineEditVal_3.setText(str(t[2]))
-               LEARemplir.valueChange()
-            else : 
-               self.ajoutLineEdit(t,False)
-               nomLineEdit=self.nomLine+str(self.indexDernierLabel)
-               LEARemplir=getattr(self,nomLineEdit) 
-               LEARemplir.valueChange()
-
-  def RBListePush(self):
-  # PN a rendre generique avec un truc tel prerempli
-      if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
-      if not hasattr(self.editor.readercata.cata[0],'sd_ligne') : self.editor.readercata.cata[0].sd_ligne=None
-      if not hasattr(self.editor.readercata.cata[0],'sd_generateur') : self.editor.readercata.cata[0].sd_generateur=None
-      if not hasattr(self.editor.readercata.cata[0],'sd_transfo') : self.editor.readercata.cata[0].sdtransfo=None
-      if not hasattr(self.editor.readercata.cata[0],'sd_charge') : self.editor.readercata.cata[0].sd_charge=None
-      if not hasattr(self.editor.readercata.cata[0],'sd_moteur') : self.editor.readercata.cata[0].sd_moteur=None
-      if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
-         val=[]
-         if  hasattr(self.objSimp.jdc,'LineDico'):
-          for k in self.objSimp.jdc.LineDico.keys() :
-              try :
-               valeur=self.objSimp.jdc.get_concept(k)
-               val.append((valeur,0))
-              except :
-               pass
-         self.node.item.set_valeur(val)
-      if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
-         val=[]
-         if  hasattr(self.objSimp.jdc,'MachineDico'):
-          for k in self.objSimp.jdc.MachineDico.keys() :
-              try :
-               valeur=self.objSimp.jdc.get_concept(k)
-               val.append((valeur,0))
-              except :
-               pass
-         self.node.item.set_valeur(val)
-      if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
-         val=[]
-         if  hasattr(self.objSimp.jdc,'TransfoDico'):
-          for k in self.objSimp.jdc.TransfoDico.keys() :
-              try :
-               valeur=self.objSimp.jdc.get_concept(k)
-               val.append((valeur,0))
-              except :
-               pass
-         self.node.item.set_valeur(val)
-      if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
-         val=[]
-         if  hasattr(self.objSimp.jdc,'LoadDico'):
-          for k in self.objSimp.jdc.LoadDico.keys() :
-              try :
-               valeur=self.objSimp.jdc.get_concept(k)
-               val.append((valeur,0))
-              except :
-               pass
-         self.node.item.set_valeur(val)
-      if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_moteur :
-         val=[]
-         if  hasattr(self.objSimp.jdc,'MotorDico'):
-          for k in self.objSimp.jdc.MotorDico.keys() :
-              try :
-               valeur=self.objSimp.jdc.get_concept(k)
-               val.append((valeur,0))
-              except :
-               pass
-         self.node.item.set_valeur(val)
 
+                nomLEARemplir=self.nomLine+str(indexDernierRempli+1)
+                LEARemplir=getattr(self,nomLEARemplir)
+                for n in range(self.nbValeurs) :
+                    nomLineEdit='lineEditVal'+str(n+1)
+                    lineEditVal=getattr(LEARemplir,nomLineEdit)
+                    lineEditVal.setText(str(t[n]))
+            else :
+                # ne pas appeler ajoutLineEdit(t,False ) pb de boucle pb du a etablitOrdre et a listeWidgetAffichage qui bouge
+                self.indexDernierLabel=self.indexDernierLabel+1
+                nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+
+                nomCustomTuple='TupleCustom'+str(self.nbValeurs)
+                laClasseDuTuple=globals()[nomCustomTuple]
+                nouveauLE=laClasseDuTuple(self.nbValeurs,self.scrollArea,self,self.indexDernierLabel)
+
+                self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
+                setattr(self,nomLineEdit,nouveauLE)
+                nouveauLE.setValeur(t)
+
+                for n in range(self.nbValeurs) :
+                    nomLineEdit='lineEditVal'+str(n+1)
+                    lineEditVal=getattr(nouveauLE,nomLineEdit)
+                    self.listeAffichageWidget.append(lineEditVal)
+            indexDernierRempli = indexDernierRempli+1
+
+        self.etablitOrdre()
+
+
+
+    def RBListePush(self):
+    #----------------------
+    # PN a rendre generique avec un truc tel prerempli
+    # pour l instant specifique PSEN
+
+        if self.editor.code == 'VP' : return
+        if self.objSimp.valeur != None and self.objSimp.valeur != [] : return
+        if not hasattr(self.editor.readercata.cata,'sd_ligne') : self.editor.readercata.cata.sd_ligne=None
+        if not hasattr(self.editor.readercata.cata,'sd_generateur') : self.editor.readercata.cata.sd_generateur=None
+        if not hasattr(self.editor.readercata.cata,'sd_transfo') : self.editor.readercata.cata.sd_transfo=None
+        if not hasattr(self.editor.readercata.cata,'sd_charge') : self.editor.readercata.cata.sd_charge=None
+        if not hasattr(self.editor.readercata.cata,'sd_moteur') : self.editor.readercata.cata.sd_moteur=None
+        if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_ligne :
+            val=[]
+            if  hasattr(self.objSimp.jdc,'LineDico'):
+                for k in self.objSimp.jdc.LineDico :
+                    try :
+                        valeur=self.objSimp.jdc.getConcept(k)
+                        val.append((valeur,0))
+                    except :
+                        pass
+            self.node.item.setValeur(val)
+        if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_generateur :
+            val=[]
+            if  hasattr(self.objSimp.jdc,'MachineDico'):
+                for k in self.objSimp.jdc.MachineDico :
+                    try :
+                        valeur=self.objSimp.jdc.getConcept(k)
+                        val.append((valeur,0))
+                    except :
+                        pass
+            self.node.item.setValeur(val)
+        if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_transfo :
+            val=[]
+            if  hasattr(self.objSimp.jdc,'TransfoDico'):
+                for k in self.objSimp.jdc.TransfoDico :
+                    try :
+                        valeur=self.objSimp.jdc.getConcept(k)
+                        val.append((valeur,0))
+                    except :
+                        pass
+            self.node.item.setValeur(val)
+        if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_charge :
+            val=[]
+            if  hasattr(self.objSimp.jdc,'LoadDico'):
+                for k in self.objSimp.jdc.LoadDico :
+                    try :
+                        valeur=self.objSimp.jdc.getConcept(k)
+                        val.append((valeur,0))
+                    except :
+                        pass
+            self.node.item.setValeur(val)
+        if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata.sd_moteur :
+            val=[]
+            if  hasattr(self.objSimp.jdc,'MotorDico'):
+                for k in self.objSimp.jdc.MotorDico :
+                    try :
+                        valeur=self.objSimp.jdc.getConcept(k)
+                        val.append((valeur,0))
+                    except :
+                        pass
+            self.node.item.setValeur(val)