Salome HOME
11b3431baf3a354f273e93e7ed9c9f115c0be88e
[tools/eficas.git] / InterfaceQT4 / gereListeAvril11.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021   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
22 from __future__ import absolute_import
23 try :
24     from builtins import str
25     from builtins import range
26     from builtins import object
27 except : pass
28
29 import types,os
30 import traceback
31
32
33 import six
34 from six.moves import range
35 from PyQt5.QtWidgets import QLineEdit, QLabel, QFileDialog, QWidget
36 from PyQt5.QtCore    import QEvent, Qt, QTimer
37 from PyQt5.QtGui     import QIcon, QPalette
38
39 from Extensions.i18n import tr
40 from InterfaceQT4.monViewTexte   import ViewText
41
42
43 # ---------------------- #
44 class LECustom(QLineEdit):
45 # ---------------------- #
46     def __init__(self,parent,parentQt,i):
47         """
48         Constructor
49         """
50         QLineEdit.__init__(self,parent)
51
52         self.valeur=None
53         self.aEuLeFocus=False
54         self.parentQt=parentQt
55         self.parent=parent
56         self.num=i
57         self.dansUnTuple=False
58         self.numDsLaListe=-1
59         self.returnPressed.connect(self.litValeur)
60
61     def focusInEvent(self,event):
62         #print ("dans focusInEvent de LECustom",self.parentQt)
63         print ("dans focusInEvent de LECustom",self.num,self.numDsLaListe)
64         self.parentQt.aEuLeFocus=True
65         self.aEuLeFocus=True
66         self.parentQt.LineEditEnCours=self
67         self.parentQt.numLineEditEnCours=self.num
68         self.parentQt.textSelected=self.text()
69         self.setStyleSheet("border: 2px solid gray")
70         QLineEdit.focusInEvent(self,event)
71
72     def focusOutEvent(self,event):
73         #print ("dans focusOutEvent de LECustom",self.num,self.numDsLaListe, self.aEuLeFocus)
74         self.setStyleSheet("border: 0px")
75         if self.dansUnTuple    : self.setStyleSheet("background:rgb(235,235,235); border: 0px;")
76         elif self.num % 2 == 1 : self.setStyleSheet("background:rgb(210,210,210)")
77         else                   : self.setStyleSheet("background:rgb(235,235,235)")
78
79         if self.aEuLeFocus:
80             self.aEuLeFocus=False
81             self.litValeur()
82         QLineEdit.focusOutEvent(self,event)
83
84     def litValeur(self):
85         self.aEuLeFocus=False
86         val=str(self.text())
87         if str(val)=="" or val==None :
88             self.valeur=None
89             return
90         try :
91             valeur=eval(val,{})
92         except :
93             try :
94                 d=self.parentQt.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
95                 valeur=eval(val,d)
96             except :
97                 valeur=val
98
99         self.valeur=valeur
100
101     def clean(self):
102         self.setText("")
103
104     def getValeur(self):
105         return self.text()
106
107     def setValeur(self,valeur):
108         self.setText(valeur)
109         self.valeur=valeur
110
111     #def leaveEvent(self,event):
112     #   ne sert a rien. quand on modifie la valeur on prend le focus
113
114
115
116 # --------------------------- #
117 class LECustomTuple(LECustom):
118 # --------------------------- #
119     def __init__(self,parent):
120     #  index sera mis a jour par TupleCustom
121         parentQt=parent.parent().parent().parent()
122         LECustom. __init__(self,parent,parentQt,0)
123         #print (dir(self))
124
125 # ---------------------------- #
126 class MonLabelListeClic(QLabel):
127 # ---------------------------- #
128     def __init__(self,parent):
129         QLabel.__init__(self,parent)
130         self.parent=parent
131
132     def event(self,event) :
133         if event.type() == QEvent.MouseButtonRelease:
134             self.texte=self.text()
135             self.parent.traiteClicSurLabelListe(self.texte)
136         return QLabel.event(self,event)
137
138
139
140
141 # ------------- #
142 class GereListe(object):
143 # ------------- #
144
145     def __init__(self):
146         self.aEuLeFocus=False
147         self.connecterSignaux()
148
149
150     def leaveEvent(self,event):
151         if self.aEuLeFocus :
152             print ('appel de changeValeur')
153             self.changeValeur()
154             self.aEuLeFocus=False
155         QWidget.leaveEvent(self,event)
156
157     def connecterSignaux(self):
158         if hasattr(self,'RBHaut'):
159             self.RBHaut.clicked.connect(self.hautPushed)
160             self.RBBas.clicked.connect(self.basPushed)
161             self.RBMoins.clicked.connect(self.moinsPushed)
162             self.RBPlus.clicked.connect(self.plusPushed)
163             self.RBVoisListe.clicked.connect(self.voisListePushed)
164         if hasattr(self,'PBAlpha'):
165             self.PBCata.clicked.connect(self.cataPushed)
166             self.PBAlpha.clicked.connect(self.alphaPushed)
167             self.PBFind.clicked.connect(self.findPushed)
168             self.LEFiltre.returnPressed.connect(self.LEFiltreReturnPressed)
169
170     def filtreListe(self):
171         l=[]
172         if self.filtre != "" :
173             for i in self.listeAAfficher :
174                 if i.find(self.filtre) == 0 :l.append(i)
175             self.listeAAfficher=l
176         if self.alpha : self.listeAAfficher.sort()
177
178     def LEFiltreReturnPressed(self):
179         self.filtre= self.LEFiltre.text()
180         self.prepareListeResultatFiltre()
181
182     def findPushed(self):
183         self.filtre= self.LEFiltre.text()
184         self.prepareListeResultatFiltre()
185
186     def alphaPushed(self):
187         #print "alphaPushed" ,self.alpha
188         if self.alpha == 1 : return
189         self.alpha=1
190         self.prepareListeResultat()
191
192     def cataPushed(self):
193         if self.alpha == 0 : return
194         self.alpha=0
195         self.prepareListeResultat()
196
197     def hautPushed(self):
198         if self.numLineEditEnCours == 1 : return
199         else : numEchange=self.numLineEditEnCours-1
200         self.echange(self.numLineEditEnCours,numEchange)
201         self.LineEditEnCours.setFocus(True)
202         self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
203
204
205     def basPushed(self):
206         if self.numLineEditEnCours == self.indexDernierLabel : return
207         else : numEchange=self.numLineEditEnCours+1
208         self.echange(self.numLineEditEnCours,numEchange)
209         self.LineEditEnCours.setFocus(True)
210         self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
211
212     def echange(self,num1,num2):
213         # on donne le focus au a celui ou on a bouge
214         # par convention le 2
215         nomLineEdit=self.nomLine+str(num1)
216         #print nomLineEdit
217         courant=getattr(self,nomLineEdit)
218         valeurAGarder=courant.text()
219         nomLineEdit2=self.nomLine+str(num2)
220         #print nomLineEdit2
221         courant2=getattr(self,nomLineEdit2)
222         courant.setText(courant2.text())
223         courant2.setText(valeurAGarder)
224         self.changeValeur(changeDePlace=False)
225         self.numLineEditEnCours=num2
226         self.LineEditEnCours=courant2
227         self.LineEditEnCours.setFocus(True)
228
229     def moinsPushed(self):
230         # on supprime le dernier
231         if self.numLineEditEnCours == 0 : return
232         if self.indexDernierLabel == 0 : return
233         if self.numLineEditEnCours==self.indexDernierLabel :
234             nomLineEdit=self.nomLine+str(self.indexDernierLabel)
235             courant=getattr(self,nomLineEdit)
236             courant.clean()
237         else :
238             for i in range (self.numLineEditEnCours, self.indexDernierLabel):
239                 aRemonter=i+1
240                 nomLineEdit=self.nomLine+str(aRemonter)
241                 courant=getattr(self,nomLineEdit)
242                 valeurARemonter=courant.getValeur()
243                 nomLineEdit=self.nomLine+str(i)
244                 courant=getattr(self,nomLineEdit)
245                 if valeurARemonter != None : courant.setValeur(valeurARemonter)
246                 else : courant.clean()
247             nomLineEdit=self.nomLine+str(self.indexDernierLabel)
248             courant=getattr(self,nomLineEdit)
249             courant.clean()
250         self.changeValeur(changeDePlace=False,oblige=True)
251         self.setValide()
252
253     def plusPushed(self):
254         if self.indexDernierLabel == self.monSimpDef.max:
255             if len(self.listeValeursCourantes) < self.monSimpDef.max : self.chercheLigneVide()
256             else : self.editor.afficheInfos('nb max de valeurs : '+str(self.monSimpDef.max)+' atteint',Qt.red)
257             return
258         self.ajoutLineEdit()
259         self.descendLesLignes()
260         self.chercheLigneVide()
261         QTimer.singleShot(1, self.rendVisibleLigne)
262
263     def chercheLigneVide(self):
264         for i in range(self.indexDernierLabel) :
265             nomLineEdit=self.nomLine+str(i+1)
266             courant=getattr(self,nomLineEdit)
267             valeur=courant.getValeur()
268             if valeur=="" :
269                 courant.setFocus(True)
270                 self.estVisible=courant
271                 return
272
273
274     def descendLesLignes(self):
275         if self.numLineEditEnCours==self.indexDernierLabel : return
276         nomLineEdit=self.nomLine+str(self.numLineEditEnCours+1)
277         courant=getattr(self,nomLineEdit)
278         valeurADescendre=courant.getValeur()
279         courant.clean()
280         for i in range (self.numLineEditEnCours+1, self.indexDernierLabel):
281             aDescendre=i+1
282             nomLineEdit=self.nomLine+str(aDescendre)
283             courant=getattr(self,nomLineEdit)
284             valeurAGarder=courant.getValeur()
285             courant.setValeur(valeurADescendre)
286             valeurADescendre=valeurAGarder
287         self.changeValeur(changeDePlace=False)
288         if hasattr (self, 'LineEditEnCours') :self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
289
290     def voisListePushed(self):
291         texteValeurs=""
292         for v in self.node.item.getListeValeurs():
293             texteValeurs+=str(v)+", "
294         entete="Valeurs pour "+self.nom
295         f=ViewText(self,self.editor,entete,texteValeurs[0:-2])
296         f.show()
297
298
299     def selectInFile(self):
300         init=str( self.editor.maConfiguration.savedir)
301         fn = QFileDialog.getOpenFileName(self.node.appliEficas,
302                                           tr("Fichier de donnees"),
303                                           init,
304                                           tr('Tous les  Fichiers (*)',))
305         fn=fn[0]
306         if fn == None : return
307         if fn == "" : return
308         ulfile = os.path.abspath(six.text_type(fn))
309         self.editor.maConfiguration.savedir=os.path.split(ulfile)[0]
310
311         from .monSelectVal import MonSelectVal
312         MonSelectVal(file=fn,parent=self).show()
313
314     def noircirResultatFiltre(self):
315         filtre=str(self.LEFiltre.text())
316         for cb in self.listeCbRouge:
317             palette = QPalette(Qt.red)
318             palette.setColor(QPalette.WindowText,Qt.black)
319             cb.setPalette(palette)
320             t=cb.text()
321             cb.setText(t)
322         self.LEFiltre.setText("")
323         self.listeCbRouge = []
324
325
326 # ----------- #
327 class GerePlie(object):
328 # ----------- #
329
330     def gereIconePlier(self):
331         if not(hasattr(self,'BFermeListe')) : return
332         self.editor.listeDesListesOuvertes.add(self.node.item)
333         repIcon=self.node.editor.appliEficas.repIcon
334         if not (self.editor.afficheListesPliees):
335             fichier=os.path.join(repIcon, 'empty.png')
336             icon = QIcon(fichier)
337             self.BFermeListe.setIcon(icon)
338             return
339         fichier=os.path.join(repIcon, 'minusnode.png')
340         icon = QIcon(fichier)
341         self.BFermeListe.setIcon(icon)
342         self.BFermeListe.clicked.connect( self.selectWidgetPlie)
343
344     def selectWidgetPlie(self):
345         self.editor.listeDesListesOuvertes.remove(self.node.item)
346         self.reaffichePourDeplier()