1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 from __future__ import absolute_import
24 from builtins import str
25 from builtins import object
32 from PyQt5.QtWidgets import QLineEdit, QLabel, QFileDialog, QMessageBox
33 from PyQt5.QtCore import QEvent, Qt, QTimer
34 from PyQt5.QtGui import QIcon, QPalette
36 from Extensions.i18n import tr
37 from InterfaceQT4.monViewTexte import ViewText
40 # ---------------------- #
41 class LECustom(QLineEdit):
42 # ---------------------- #
43 def __init__(self,parent,parentQt,i):
47 QLineEdit.__init__(self,parent)
49 self.parentQt=parentQt
51 self.dansUnTuple=False
57 def focusInEvent(self,event):
58 #print ("dans focusInEvent de LECustom")
59 self.parentQt.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)
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)")
76 if self.dansUnTuple : self.parentTuple.getValeur()
77 QLineEdit.focusOutEvent(self,event)
81 #print ("dans litValeur de LECustom")
84 if str(val)=="" or val==None :
91 d=self.parentQt.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
96 #print ('self.valeur', self.valeur)
107 def setValeur(self,valeur):
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)
121 # ---------------------------- #
122 class MonLabelListeClic(QLabel):
123 # ---------------------------- #
124 def __init__(self,parent):
125 QLabel.__init__(self,parent)
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)
135 class GereListe(object):
138 self.connecterSignaux()
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)
155 def filtreListe(self):
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()
163 def LEFiltreReturnPressed(self):
164 self.filtre= self.LEFiltre.text()
165 self.prepareListeResultatFiltre()
167 def findPushed(self):
168 self.filtre= self.LEFiltre.text()
169 self.prepareListeResultatFiltre()
171 def alphaPushed(self):
172 #print "alphaPushed" ,self.alpha
173 if self.alpha == 1 : return
175 self.prepareListeResultat()
177 def cataPushed(self):
178 if self.alpha == 0 : return
180 self.prepareListeResultat()
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)
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)
201 def echange(self,num1,num2):
202 # on donne le focus au a celui ou on a bouge
203 # par convention le 2
205 nomLineEdit=self.nomLine+str(num1)
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
217 self.changeValeur(changeDePlace=False)
218 self.numLineEditEnCours=num2
219 self.lineEditEnCours=courant2
220 self.lineEditEnCours.setFocus(True)
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)
232 for i in range (self.numLineEditEnCours, self.indexDernierLabel):
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)
244 self.changeValeur(changeDePlace=False,oblige=True)
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)
254 self.descendLesLignes()
255 self.chercheLigneVide()
256 QTimer.singleShot(1, self.rendVisibleLigne)
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
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()
275 for i in range (self.numLineEditEnCours+1, self.indexDernierLabel):
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)
285 def voisListePushed(self):
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])
294 def selectInFile(self):
295 init=str( self.editor.maConfiguration.savedir)
296 fn = QFileDialog.getOpenFileName(self.node.appliEficas,
297 tr("Fichier de donnees"),
299 tr('Tous les Fichiers (*)',))
301 if fn == None : return
303 ulfile = os.path.abspath(fn)
304 self.editor.maConfiguration.savedir=os.path.split(ulfile)[0]
306 from .monSelectVal import MonSelectVal
307 MonSelectVal(file=fn,parent=self).show()
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)
317 self.LEFiltre.setText("")
318 self.listeCbRouge = []
322 class GerePlie(object):
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)
334 fichier=os.path.join(repIcon, 'minusnode.png')
335 icon = QIcon(fichier)
336 self.BFermeListe.setIcon(icon)
337 self.BFermeListe.clicked.connect( self.selectWidgetPlie)
339 def selectWidgetPlie(self):
340 self.editor.listeDesListesOuvertes.remove(self.node.item)
341 self.reaffichePourDeplier()