Salome HOME
modif pour MT
[tools/eficas.git] / InterfaceQT4 / gereListeAvril11.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017   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()
347
348         
349