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