]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monWidgetPlusieursBase.py
Salome HOME
fin portage python 3
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursBase.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Modules Python
21 from __future__ import absolute_import
22 try :
23    from builtins import str
24    from builtins import range
25    from builtins import object
26 except : pass
27
28 import types,os,sys
29
30 from six.moves import range
31 from PyQt5.QtGui     import QIcon 
32 from PyQt5.QtWidgets import QApplication
33 from PyQt5.QtCore    import QTimer, QSize, Qt
34
35 # Modules Eficas
36 from Extensions.i18n import tr
37
38 from .feuille                import Feuille
39 from desWidgetPlusieursBase import Ui_WidgetPlusieursBase 
40 from .politiquesValidation   import PolitiquePlusieurs
41 from .qtSaisie               import SaisieValeur
42 from .gereListe              import GereListe
43 from .gereListe              import GerePlie
44 from .gereListe              import LECustom
45
46 dicoLongueur={2:95,3:125,4:154,5:183,6:210}
47 hauteurMax=253
48
49 class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie):
50
51   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
52         #print "MonWidgetPlusieursBase", nom
53         self.nomLine="lineEditVal"
54         self.inInit=True
55         self.indexDernierLabel=0
56         self.NumLineEditEnCours=0
57         self.listeAffichageWidget=[]
58         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
59         GereListe.__init__(self)
60         self.gereIconePlier()
61         self.BSelectFichier.clicked.connect(self.selectInFile)
62
63         if sys.platform[0:5]!="linux":
64           repIcon=self.node.editor.appliEficas.repIcon
65           fichier=os.path.join(repIcon, 'arrow_up.png')
66           icon = QIcon(fichier)
67           self.RBHaut.setIcon(icon)
68           self.RBHaut.setIconSize(QSize(32, 32))
69           fichier2=os.path.join(repIcon, 'arrow_down.png')
70           icon2 = QIcon(fichier2)
71           self.RBBas.setIcon(icon2)
72           fichier3=os.path.join(repIcon, 'file-explorer.png')
73           icon3 = QIcon(fichier2)
74           self.BSelectFichier.setIcon(icon3)
75           self.BSelectFichier.setIconSize(QSize(32, 32))
76
77         self.listeValeursCourantes=self.node.item.GetListeValeurs()
78         if self.monSimpDef.max != "**"  and self.monSimpDef.max < 7: 
79            hauteur=dicoLongueur[self.monSimpDef.max]
80            self.resize(self.width(),hauteur)
81            self.setMinimumHeight(hauteur)
82            if self.monSimpDef.max == self.monSimpDef.min : self.setMaximumHeight(hauteur)
83         else :
84            self.resize(self.width(),hauteurMax)
85            self.setMinimumHeight(hauteurMax)
86         self.finCommentaireListe()
87         self.parentQt.commandesLayout.insertWidget(-1,self)
88         self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
89         self.AAfficher=self.lineEditVal1
90         self.inInit=False
91
92
93   def setValeurs(self):
94        self.vScrollBar = self.scrollArea.verticalScrollBar()
95        self.politique=PolitiquePlusieurs(self.node,self.editor)
96        # construction du min de valeur a entrer
97        if self.monSimpDef.max == "**" : aConstruire=7
98        else                           : aConstruire=self.monSimpDef.max
99        #for i in range(1,aConstruire):
100        for i in range(1,7):
101            self.ajoutLineEdit()
102        QApplication.processEvents()
103        self.scrollArea.ensureWidgetVisible(self.lineEditVal1)
104        self.listeValeursCourantes=self.node.item.GetListeValeurs()
105        index=1
106        for valeur in self.listeValeursCourantes :
107            val=self.politique.GetValeurTexte(valeur)
108            nomLineEdit="lineEditVal"+str(index)
109            if hasattr(self,nomLineEdit) : 
110               courant=getattr(self,nomLineEdit)
111               if 'R' in self.objSimp.definition.type and str(val) != repr(val) :  courant.setText(repr(val))
112               else                     :  courant.setText(str(val))
113            else :
114               self.ajoutLineEdit(val)
115            index=index+1
116        # ajout d'une ligne vide ou affichage commentaire
117        if self.indexDernierLabel < self.monSimpDef.max  : self.ajoutLineEdit()
118        else : self.scrollArea.setToolTip('nb max de valeurs atteint')
119        #self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
120        
121
122   def ajoutLineEdit(self,valeur=None,):
123       self.indexDernierLabel=self.indexDernierLabel+1
124       nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
125       if hasattr(self,nomLineEdit) : 
126          self.indexDernierLabel=self.indexDernierLabel-1
127          return
128       nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
129       self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
130       nouveauLE.setText("")
131       if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
132       else :                               nouveauLE.setStyleSheet("background:rgb(235,235,235)")
133       nouveauLE.setFrame(False)
134       nouveauLE.returnPressed.connect(self.changeValeur)
135       setattr(self,nomLineEdit,nouveauLE)
136       self.listeAffichageWidget.append(nouveauLE)
137       self.etablitOrdre()
138       if valeur != None : nouveauLE.setText(str(valeur))
139       # deux lignes pour que le ensureVisible fonctionne
140       self.estVisible=nouveauLE
141       if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
142       #if donneLeFocus==True : nouveauLE.setFocus()
143
144   def etablitOrdre(self):
145       i=0
146       while(i +1 < len(self.listeAffichageWidget)):
147          self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
148          self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
149          i=i+1
150       # si on boucle on perd l'ordre
151
152
153   def rendVisibleLigne(self):
154       QApplication.processEvents()
155       self.estVisible.setFocus()
156       self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
157       
158
159   def finCommentaire(self):
160       return self.finCommentaireListe()
161
162   def ajout1Valeur(self,valeur=None):
163         if valeur == None : return
164         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
165         if validite == 0 : return
166         if liste ==[]    : return
167         listeVal=[]
168         for valeur in self.listeValeursCourantes : listeVal.append(valeur)
169         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,-1,listeVal)
170         if (comm2 != "" and comm != None) : return comm2
171         if validite : 
172            self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
173            if len(self.listeValeursCourantes) > self.monSimpDef.min :
174               self.node.item.set_valeur(self.listeValeursCourantes)
175               self.reaffiche()
176            return None
177         else :
178            return(comm2+" "+comm)
179         
180   def reaffiche(self):
181       # A priori, on ne fait rien
182       pass
183
184   def ajoutNValeur(self,liste) :
185       for val in liste :
186          i=1
187          ajoute=False
188          while i <  self.indexDernierLabel+1:
189             nomLineEdit="lineEditVal"+str(i)
190             courant=getattr(self,nomLineEdit)
191             valeur=courant.text()
192             if valeur == None or valeur == "" :
193               ajoute=True
194               courant.setText(str(val))
195               commentaire=self.ajout1Valeur(val)
196               if (commentaire != None ):
197                  self.editor.affiche_infos(commentaire,Qt.red)
198                  courant.setText("")
199               break
200             else : 
201               i=i+1
202          if ajoute : continue
203          self.ajoutLineEdit(valeur=str(val))
204          self.changeValeur()
205                 
206
207   def changeValeur(self,changeDePlace=True,oblige=False):
208       donneFocus=None
209       derniereValeur=None
210       self.listeValeursCourantes = []
211       fin=self.indexDernierLabel
212       for i in range (1, fin):
213           nomLineEdit="lineEditVal"+str(i)
214           courant=getattr(self,nomLineEdit)
215           valeur=courant.text()
216           lval=valeur.split(',')
217           if len (lval) > 1 : 
218              courant.setText(lval[0])
219              self.ajoutNValeur(lval[1:])
220              self.listeValeursCourantes = []
221
222       for i in range (1, self.indexDernierLabel+1):
223           nomLineEdit="lineEditVal"+str(i)
224           courant=getattr(self,nomLineEdit)
225           valeur=courant.text()
226           if valeur != None and valeur != "" : 
227              commentaire=self.ajout1Valeur(valeur)
228              if (commentaire != None ):
229                  self.editor.affiche_infos(commentaire,Qt.red)
230                  courant.setText("")
231                  donneFocus=courant
232                  self.reaffiche()
233                  return
234              else :
235                  self.editor.affiche_infos("")
236           elif donneFocus==None : donneFocus=courant
237       nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
238       dernier=getattr(self,nomDernierLineEdit)
239       derniereValeur=dernier.text()
240       if changeDePlace:
241          if donneFocus != None : 
242            donneFocus.setFocus()
243            self.scrollArea.ensureWidgetVisible(donneFocus)
244          elif self.indexDernierLabel < self.monSimpDef.max  : 
245            self.ajoutLineEdit()
246       if self.listeValeursCourantes == [] : return
247       min,max = self.node.item.GetMinMax()
248       if len(self.listeValeursCourantes) < self.monSimpDef.min  :
249         self.editor.affiche_infos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
250       if len(self.listeValeursCourantes) < min and oblige==True: return
251       if len(self.listeValeursCourantes) > max : return
252       self.node.item.set_valeur(self.listeValeursCourantes)
253       if len(self.listeValeursCourantes) == self.monSimpDef.max  :
254         self.editor.affiche_infos(tr('nb max de valeurs atteint'))
255       self.setValide()
256       self.reaffiche()
257
258           
259   def entreListe(self,listeDeValeur,index):
260              self.entreListe(lval, i)
261
262 # Avertissement quand on quitte le widget