Salome HOME
Tuple
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursBase.py
index 95fa29a3b43cad8f37695ff9c0901ba7e55fa0da..a43800ab0e7f70d6f47c04509c1b5efe33514fe1 100644 (file)
@@ -30,20 +30,40 @@ from desWidgetPlusieursBase import Ui_WidgetPlusieursBase
 from politiquesValidation   import PolitiquePlusieurs
 from qtSaisie               import SaisieValeur
 from gereListe              import GereListe
+from gereListe              import LECustom
 
-class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille):
+dicoLongueur={2:95,3:125,4:154,5:183,6:210}
+hauteurMax=253
 
-  def __init__(self,node,monSimpDef,nom,objSimp,parentQt):
-        print "MonWidgetPlusieursBase", nom
-        self.index=1
+class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
+
+  def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+        #print "MonWidgetPlusieursBase", nom
+        self.nomLine="lineEditVal"
+        self.inInit=True
         self.indexDernierLabel=0
-        Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt)
+        self.NumLineEditEnCours=0
+        self.listeAffichageWidget=[]
+        Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+        GereListe.__init__(self)
+        self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
+
         self.listeValeursCourantes=self.node.item.GetListeValeurs()
-        self.parentQt.commandesLayout.insertWidget(1,self)
+        if self.monSimpDef.max != "**"  and self.monSimpDef.max < 7: 
+           hauteur=dicoLongueur[self.monSimpDef.max]
+           self.resize(self.width(),hauteur)
+           self.setMinimumHeight(hauteur)
+           if self.monSimpDef.max == self.monSimpDef.min : self.setMaximumHeight(hauteur)
+        else :
+           self.resize(self.width(),hauteurMax)
+           self.setMinimumHeight(hauteurMax)
+        self.parentQt.commandesLayout.insertWidget(-1,self)
+        self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
+        self.AAfficher=self.lineEditVal1
+        self.inInit=False
 
 
   def setValeurs(self):
-       #print "je passe dans SetValeur"
        self.vScrollBar = self.scrollArea.verticalScrollBar()
        self.politique=PolitiquePlusieurs(self.node,self.editor)
        # construction du min de valeur a entrer
@@ -52,12 +72,12 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille):
        for i in range(1,aConstruire):
            self.ajoutLineEdit()
        qApp.processEvents()
-       self.scrollArea.ensureWidgetVisible(self.labelVal1)
+       self.scrollArea.ensureWidgetVisible(self.lineEditVal1)
        self.listeValeursCourantes=self.node.item.GetListeValeurs()
        index=1
        for valeur in self.listeValeursCourantes :
            val=self.politique.GetValeurTexte(valeur)
-           nomLineEdit="labelVal"+str(index)
+           nomLineEdit="lineEditVal"+str(index)
            if hasattr(self,nomLineEdit) : 
               courant=getattr(self,nomLineEdit)
               courant.setText(str(val))
@@ -70,28 +90,38 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille):
        #self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
        
 
-  def ajoutLineEdit(self,valeur=None):
+  def ajoutLineEdit(self,valeur=None,):
       self.indexDernierLabel=self.indexDernierLabel+1
-      nomLineEdit="labelVal"+str(self.indexDernierLabel)
+      nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
       if hasattr(self,nomLineEdit) : 
          self.indexDernierLabel=self.indexDernierLabel-1
          return
-      nouveauLE = QLineEdit(self.scrollArea)
+      nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
       self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
       nouveauLE.setText("")
       if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
       else :                              nouveauLE.setStyleSheet("background:rgb(235,235,235)")
       nouveauLE.setFrame(False)
       self.connect(nouveauLE,SIGNAL("returnPressed()"),self.changeValeur)
-      nouveauLE.setFocus()
       setattr(self,nomLineEdit,nouveauLE)
+      self.listeAffichageWidget.append(nouveauLE)
+      self.etablitOrdre()
       if valeur != None : nouveauLE.setText(str(valeur))
       # deux lignes pour que le ensureVisible fonctionne
       self.estVisible=nouveauLE
-      QTimer.singleShot(1, self.rendVisible)
+      if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
+      #if donneLeFocus==True : nouveauLE.setFocus()
+
+  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
+      # si on boucle on perd l'ordre
 
 
-  def rendVisible(self):
+  def rendVisibleLigne(self):
       qApp.processEvents()
       self.estVisible.setFocus()
       self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
@@ -132,18 +162,44 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille):
            self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
            if len(self.listeValeursCourantes) > self.monSimpDef.min :
               self.node.item.set_valeur(self.listeValeursCourantes)
+              self.reaffiche()
            return None
         else :
            return(comm2+" "+comm)
         
+  def reaffiche(self):
+      # A priori, on ne fait rien
+      pass
 
+  def AjoutNValeur(self,liste) :
+      for val in liste :
+         i=1
+         ajoute=False
+         while i <  self.indexDernierLabel+1:
+            nomLineEdit="lineEditVal"+str(i)
+            courant=getattr(self,nomLineEdit)
+            valeur=courant.text()
+            if valeur == None or valeur == QString("") :
+              ajoute=True
+              courant.setText(str(val))
+              commentaire=self.ajout1Valeur(val)
+              if (commentaire != None ):
+                 self.editor.affiche_infos(commentaire,Qt.red)
+                 courant.setText("")
+              break
+            else : 
+              i=i+1
+         if ajoute : continue
+         self.ajoutLineEdit(valeur=str(val))
+         self.changeValeur()
+                
 
-  def changeValeur(self):
+  def changeValeur(self,changeDePlace=True,oblige=False):
       donneFocus=None
       derniereValeur=None
       self.listeValeursCourantes = []
       for i in range (1, self.indexDernierLabel+1):
-          nomLineEdit="labelVal"+str(i)
+          nomLineEdit="lineEditVal"+str(i)
           courant=getattr(self,nomLineEdit)
           valeur=courant.text()
           if valeur != None and valeur != "" : 
@@ -152,25 +208,31 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille):
                  self.editor.affiche_infos(commentaire,Qt.red)
                  courant.setText("")
                  donneFocus=courant
+                 self.reaffiche()
+                 return
+             else :
+                 self.editor.affiche_infos("")
           elif donneFocus==None : donneFocus=courant
-      nomDernierLineEdit="labelVal"+str(self.indexDernierLabel)
+      nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
       dernier=getattr(self,nomDernierLineEdit)
       derniereValeur=dernier.text()
-      print 'ds chge valeur'
-      if donneFocus != None : 
-         donneFocus.setFocus()
-         self.scrollArea.ensureWidgetVisible(donneFocus)
-      elif self.indexDernierLabel < self.monSimpDef.max  : 
+      if changeDePlace:
+         if donneFocus != None : 
+           donneFocus.setFocus()
+           self.scrollArea.ensureWidgetVisible(donneFocus)
+         elif self.indexDernierLabel < self.monSimpDef.max  : 
            self.ajoutLineEdit()
-      else : 
-        self.scrollArea.setToolTip('nb max de valeurs atteint')
-        self.editor.affiche_infos('nb max de valeurs atteint')
       if self.listeValeursCourantes == [] : return
       min,max = self.node.item.GetMinMax()
+      if len(self.listeValeursCourantes) < self.monSimpDef.min  :
+        self.editor.affiche_infos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
+      if len(self.listeValeursCourantes) < min and oblige==True: return
       if len(self.listeValeursCourantes) > max : return
-      if len(self.listeValeursCourantes) < min : return
       self.node.item.set_valeur(self.listeValeursCourantes)
+      if len(self.listeValeursCourantes) == self.monSimpDef.max  :
+        self.editor.affiche_infos(tr('nb max de valeurs atteint'))
       self.setValide()
+      self.reaffiche()