1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017 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 range
26 from builtins import object
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
39 from Extensions.i18n import tr
40 from InterfaceQT4.monViewTexte import ViewText
43 # ---------------------- #
44 class LECustom(QLineEdit):
45 # ---------------------- #
46 def __init__(self,parent,parentQt,i):
50 QLineEdit.__init__(self,parent)
54 self.parentQt=parentQt
57 self.dansUnTuple=False
59 self.returnPressed.connect(self.litValeur)
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
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)
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)")
82 QLineEdit.focusOutEvent(self,event)
87 if str(val)=="" or val==None :
94 d=self.parentQt.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape)
107 def setValeur(self,valeur):
111 #def leaveEvent(self,event):
112 # ne sert a rien. quand on modifie la valeur on prend le focus
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)
125 # ---------------------------- #
126 class MonLabelListeClic(QLabel):
127 # ---------------------------- #
128 def __init__(self,parent):
129 QLabel.__init__(self,parent)
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)
142 class GereListe(object):
146 self.aEuLeFocus=False
147 self.connecterSignaux()
150 def leaveEvent(self,event):
152 print ('appel de changeValeur')
154 self.aEuLeFocus=False
155 QWidget.leaveEvent(self,event)
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)
170 def filtreListe(self):
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()
178 def LEFiltreReturnPressed(self):
179 self.filtre= self.LEFiltre.text()
180 self.prepareListeResultatFiltre()
182 def findPushed(self):
183 self.filtre= self.LEFiltre.text()
184 self.prepareListeResultatFiltre()
186 def alphaPushed(self):
187 #print "alphaPushed" ,self.alpha
188 if self.alpha == 1 : return
190 self.prepareListeResultat()
192 def cataPushed(self):
193 if self.alpha == 0 : return
195 self.prepareListeResultat()
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)
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)
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)
217 courant=getattr(self,nomLineEdit)
218 valeurAGarder=courant.text()
219 nomLineEdit2=self.nomLine+str(num2)
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)
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)
238 for i in range (self.numLineEditEnCours, self.indexDernierLabel):
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)
250 self.changeValeur(changeDePlace=False,oblige=True)
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)
259 self.descendLesLignes()
260 self.chercheLigneVide()
261 QTimer.singleShot(1, self.rendVisibleLigne)
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()
269 courant.setFocus(True)
270 self.estVisible=courant
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()
280 for i in range (self.numLineEditEnCours+1, self.indexDernierLabel):
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)
290 def voisListePushed(self):
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])
299 def selectInFile(self):
300 init=str( self.editor.maConfiguration.savedir)
301 fn = QFileDialog.getOpenFileName(self.node.appliEficas,
302 tr("Fichier de donnees"),
304 tr('Tous les Fichiers (*)',))
306 if fn == None : return
308 ulfile = os.path.abspath(six.text_type(fn))
309 self.editor.maConfiguration.savedir=os.path.split(ulfile)[0]
311 from .monSelectVal import MonSelectVal
312 MonSelectVal(file=fn,parent=self).show()
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)
322 self.LEFiltre.setText("")
323 self.listeCbRouge = []
327 class GerePlie(object):
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)
339 fichier=os.path.join(repIcon, 'minusnode.png')
340 icon = QIcon(fichier)
341 self.BFermeListe.setIcon(icon)
342 self.BFermeListe.clicked.connect( self.selectWidgetPlie)
344 def selectWidgetPlie(self):
345 self.editor.listeDesListesOuvertes.remove(self.node.item)
346 self.reaffichePourDeplier()