Salome HOME
suite chgt copyright et menage
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursBase.py
index 8f8fddab6971b2a9e64e194ea831ebd0fa1618d8..67cbf912dff443a9368f6807ca80c7739c71cdd7 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2013   EDF R&D
+# Copyright (C) 2007-2017   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
+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.QtGui     import QIcon 
+from PyQt5.QtWidgets import QApplication, QMessageBox
+from PyQt5.QtCore    import QTimer, QSize, Qt
 
 # Modules Eficas
-from PyQt4.QtGui import *
-from PyQt4.QtCore import *
 from Extensions.i18n import tr
 
-from feuille                import Feuille
+from .feuille                import Feuille
 from desWidgetPlusieursBase import Ui_WidgetPlusieursBase 
-from politiquesValidation   import PolitiquePlusieurs
-from qtSaisie               import SaisieValeur
-from gereListe              import GereListe
-from gereListe              import LECustom
+from .politiquesValidation   import PolitiquePlusieurs
+from .qtSaisie               import SaisieValeur
+from .gereListe              import GereListe
+from .gereListe              import GerePlie
+from .gereListe              import LECustom
 
-dicoLongueur={2:95,3:125,4:154,5:183,6:210}
+dicoLongueur={2:95,3:125,4:154,5:183,6:210,float('inf'):210}
 hauteurMax=253
 
-class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
+class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie):
 
   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
         #print "MonWidgetPlusieursBase", nom
+        self.inFocusOutEvent=False
+        self.nomLine="lineEditVal"
         self.inInit=True
         self.indexDernierLabel=0
+        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.gereIconePlier()
+        self.BSelectFichier.clicked.connect(self.selectInFile)
+
+        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(fichier2)
+          self.BSelectFichier.setIcon(icon3)
+          self.BSelectFichier.setIconSize(QSize(32, 32))
+        icon=QIcon(self.repIcon+"/MoinsBleu.png")
+        self.RBMoins.setIcon(icon)
+        icon=QIcon(self.repIcon+"/PlusBleu.png")
+        self.RBPlus.setIcon(icon)
+        icon=QIcon(self.repIcon+"/verre-loupe-icone-6087-64.png")
+        self.RBVoisListe.setIcon(icon)
+
 
         self.listeValeursCourantes=self.node.item.GetListeValeurs()
         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)
+           hauteurMax=dicoLongueur[self.monSimpDef.max]
         else :
-           self.resize(self.width(),hauteurMax)
-           self.setMinimumHeight(hauteurMax)
-        self.parentQt.commandesLayout.insertWidget(1,self)
+           hauteurMax=220
+        #   if self.monSimpDef.max == self.monSimpDef.min : self.setMaximumHeight(hauteur)
+        self.resize(self.width(),hauteurMax)
+        self.setMinimumHeight(hauteurMax)
+        self.finCommentaireListe()
+        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
-       if self.monSimpDef.max == "**" : aConstruire=7
-       else                           : aConstruire=self.monSimpDef.max
+       if self.monSimpDef.max == "**"  : aConstruire=7
+       elif self.monSimpDef.max == float('inf'): aConstruire=7
+       else                            : aConstruire=self.monSimpDef.max
+
        for i in range(1,aConstruire):
            self.ajoutLineEdit()
-       qApp.processEvents()
+       QApplication.processEvents()
        self.scrollArea.ensureWidgetVisible(self.lineEditVal1)
        self.listeValeursCourantes=self.node.item.GetListeValeurs()
        index=1
@@ -79,17 +116,19 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
            nomLineEdit="lineEditVal"+str(index)
            if hasattr(self,nomLineEdit) : 
               courant=getattr(self,nomLineEdit)
-              courant.setText(str(val))
+              if 'R' in self.objSimp.definition.type and str(val) != repr(val) :  courant.setText(repr(val))
+              else                     :  courant.setText(str(val))
            else :
               self.ajoutLineEdit(val)
            index=index+1
        # ajout d'une ligne vide ou affichage commentaire
        if self.indexDernierLabel < self.monSimpDef.max  : self.ajoutLineEdit()
        else : self.scrollArea.setToolTip('nb max de valeurs atteint')
+       #self.adjustSize()
        #self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
        
 
-  def ajoutLineEdit(self,valeur=None):
+  def ajoutLineEdit(self,valeur=None,):
       self.indexDernierLabel=self.indexDernierLabel+1
       nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
       if hasattr(self,nomLineEdit) : 
@@ -101,7 +140,8 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
       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.returnPressed.connect(self.changeValeur)
+
       setattr(self,nomLineEdit,nouveauLE)
       self.listeAffichageWidget.append(nouveauLE)
       self.etablitOrdre()
@@ -109,6 +149,7 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
       # deux lignes pour que le ensureVisible fonctionne
       self.estVisible=nouveauLE
       if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
+      #if donneLeFocus==True : nouveauLE.setFocus()
 
   def etablitOrdre(self):
       i=0
@@ -119,36 +160,14 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
       # si on boucle on perd l'ordre
 
 
-
   def rendVisibleLigne(self):
-      #PNPNP
-      return
-      qApp.processEvents()
+      QApplication.processEvents()
       self.estVisible.setFocus()
       self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
       
 
   def finCommentaire(self):
-        commentaire=""
-        mc = self.node.item.get_definition()
-        d_aides = { 'TXM' : 'chaines de caracteres',
-                  'R'   : 'reels',
-                  'I'   : 'entiers',
-                  'C'   : 'complexes'}
-        type = mc.type[0]
-        if not d_aides.has_key(type) :
-           if mc.min == mc.max:
-               commentaire=tr("Entrez ")+str(mc.min)+tr(" valeurs ")
-           else :
-               commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)+tr(" valeurs ")
-        else :
-           if mc.min == mc.max:
-               commentaire=tr("Entrez ")+str(mc.min)+" "+tr(d_aides[type])
-           else :
-               commentaire=tr("Entrez entre ")+str(mc.min)+(" et  ")+str(mc.max) +" " +tr(d_aides[type])
-        aideval=self.node.item.aide()
-        commentaire=commentaire + "   " + QString.toUtf8(QString(aideval))
-        return str(commentaire)
+      return self.finCommentaireListe()
 
   def ajout1Valeur(self,valeur=None):
         if valeur == None : return
@@ -168,13 +187,57 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
         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 == "" :
+              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,changeDePlace=True):
-      print 'ds chge valeur'
+  def changeValeur(self,changeDePlace=True,oblige=False):
       donneFocus=None
       derniereValeur=None
       self.listeValeursCourantes = []
+      fin=self.indexDernierLabel
+      for i in range (1, fin):
+          nomLineEdit="lineEditVal"+str(i)
+          courant=getattr(self,nomLineEdit)
+          valeur=courant.text()
+          lval=valeur.split(',')
+          if len (lval) > 1 : 
+             msgBox=QMessageBox()
+             msgBox.setText("separator ',' ")
+             msgBox.setInformativeText("Do you want to enter " + str (lval) + "?")
+             msgBox.setStandardButtons( QMessageBox.Ok | QMessageBox.Cancel)
+             msgBox.setDefaultButton(QMessageBox.Ok)
+             ret = msgBox.exec_()
+             if ret != 1024 : 
+                courant.setText("") 
+                return
+             courant.setText(lval[0])
+             self.ajoutNValeur(lval[1:])
+             self.listeValeursCourantes = []
+
       for i in range (1, self.indexDernierLabel+1):
           nomLineEdit="lineEditVal"+str(i)
           courant=getattr(self,nomLineEdit)
@@ -185,7 +248,12 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
                  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="lineEditVal"+str(self.indexDernierLabel)
       dernier=getattr(self,nomDernierLineEdit)
       derniereValeur=dernier.text()
@@ -195,13 +263,15 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
            self.scrollArea.ensureWidgetVisible(donneFocus)
          elif self.indexDernierLabel < self.monSimpDef.max  : 
            self.ajoutLineEdit()
-      if  self.indexDernierLabel == self.monSimpDef.max  :
-        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()