Salome HOME
pb de check box
[tools/eficas.git] / InterfaceQT4 / monWidgetCommande.py
1 # Copyright (C) 2007-2013   EDF R&D
2 #
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # Lesser General Public License for more details.
12 #
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19 # Modules Python
20 # Modules Eficas
21 from __future__ import absolute_import
22 try :
23    from builtins import str
24 except : pass
25
26 import types
27
28 from desWidgetCommande import Ui_WidgetCommande
29 from .groupe import Groupe
30 from .gereIcones import FacultatifOuOptionnel
31
32 from PyQt5.QtWidgets  import QApplication, QWidget, QSpacerItem, QSizePolicy
33 from PyQt5.QtGui import QFont, QIcon
34 from PyQt5.QtCore import QTimer
35
36
37 from Extensions.i18n import tr
38 import Accas 
39 import os
40
41     
42 # Import des panels
43
44 class MonWidgetCommande(Ui_WidgetCommande,Groupe):
45   """
46   """
47   def __init__(self,node,editor,etape):
48       self.listeAffichageWidget=[]
49       self.inhibe=0
50       self.ensure=0
51       editor.inhibeSplitter=1
52       Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
53       editor.inhibeSplitter=0
54
55       self.frameAffichage.setMinimumHeight(20)
56       if node.item.get_fr() != "" : self.labelDoc.setText(node.item.get_fr())
57       else : 
58         self.labelDoc.close()
59         self.frameAffichage.resize(self.frameAffichage.width(),50)
60       
61       #if (etape.get_type_produit()==None): self.LENom.close()
62       #test,mess = self.node.item.nomme_sd('ee')
63       if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close()
64       elif (hasattr(etape.definition,'sd_prod') and type(etape.definition.sd_prod)== types.FunctionType):self.LENom.close()
65       elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None: self.LENom.setText(etape.sdnom)
66       else : self.LENom.setText("")
67
68
69       maPolice= QFont("Times", 10,)
70       self.setFont(maPolice)
71       self.labelNomCommande.setText(tr(self.obj.nom))
72
73
74       if self.editor.closeFrameRechercheCommande==True : self.closeAutreCommande()
75       else :
76         try :
77            self.bCatalogue.clicked.connect(self.afficheCatalogue)
78            self.bAvant.clicked.connect(self.afficheAvant)
79            self.bApres.clicked.connect(self.afficheApres)
80         except :
81            pass
82         self.LENom.returnPressed.connect(self.nomChange)
83    
84       if self.editor.code in ['Adao','ADAO'] and self.editor.closeFrameRechercheCommande==True  : 
85                       self.frameAffichage.close()
86
87       if self.editor.code in ['CARMELCND',] : self.closeAutreCommande()
88       self.racine=self.node.tree.racine
89       if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True)
90
91       self.setAcceptDrops(True)
92       self.etablitOrdre()
93
94       if self.editor.code == "CARMELCND" : 
95          self.RBPoubelle.close() # JDC Fige
96          return                  # Pas de MC Optionnels pour Carmel
97
98       from .monWidgetOptionnel import MonWidgetOptionnel
99       if self.editor.widgetOptionnel!= None : 
100         self.monOptionnel=self.editor.widgetOptionnel
101       else :
102         self.editor.inhibeSplitter=1
103         self.monOptionnel=MonWidgetOptionnel(self.editor)
104         self.editor.widgetOptionnel=self.monOptionnel
105         self.editor.splitter.addWidget(self.monOptionnel)
106         self.editor.ajoutOptionnel()
107         self.editor.inhibeSplitter=0
108       self.afficheOptionnel()
109       #self.editor.restoreSplitterSizes()
110
111       #print "fin init de widget Commande"
112       
113
114   def closeAutreCommande(self):
115       self.bCatalogue.close()
116       self.bAvant.close()
117       self.bApres.close()
118
119   def donnePremier(self):
120       #print "dans donnePremier"
121       QApplication.processEvents()
122       if self.listeAffichageWidget != [] :
123          self.listeAffichageWidget[0].setFocus(7)
124       QApplication.processEvents()
125       #print self.focusWidget()
126
127
128   def focusNextPrevChild(self, next):
129       # on s assure que ce n est pas un chgt de fenetre
130       #print "je passe dans focusNextPrevChild"
131       if self.editor.fenetreCentraleAffichee != self : return True
132       f=self.focusWidget()
133       if f not in self.listeAffichageWidget :
134          i=0
135          while not hasattr (f,'AAfficher') :
136            if f==None :i=-1; break
137            f=f.parentWidget()
138          if hasattr(f,'AAfficher') : f=f.AAfficher
139          if i != -1 : i=self.listeAffichageWidget.index(f)
140       else :i=self.listeAffichageWidget.index(f) 
141       if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe: 
142          try :
143            self.listeAffichageWidget[1].setFocus(7)
144            w=self.focusWidget()
145            self.inhibe=1
146            w.focusPreviousChild()
147            self.inhibe=0
148            return True
149          except :
150            pass
151            #print self.listeAffichageWidget
152            #print "souci ds focusNextPrevChild"
153       if i==0 and next==False and not self.inhibe: 
154          if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
155             self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
156          self.listeAffichageWidget[-2].setFocus(7)
157          self.inhibe=1
158          w=self.focusWidget()
159          w.focusNextChild()
160          self.inhibe=0
161          return True
162       if i==0 and next==True and not self.inhibe:
163          self.listeAffichageWidget[0].setFocus(7)
164          self.inhibe=1
165          w=self.focusWidget()
166          w.focusNextChild()
167          self.inhibe=0
168          return True
169       if i>0 and next==False and not self.inhibe:
170          if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
171            self.listeAffichageWidget[i-1].setFocus(7)
172            return True
173       return QWidget.focusNextPrevChild(self, next)
174
175   def etablitOrdre(self):
176       i=0
177       while(i +1 < len(self.listeAffichageWidget)):
178          self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
179          i=i+1
180       # si on boucle on perd l'ordre
181  
182   def  afficheNieme(self,n):
183       #print ('ds afficheNieme')
184       self.listeAffichageWidget[n].setFocus(7)
185
186   def  afficheSuivant(self,f):
187       #print ('ds afficheSuivant')
188       try :
189         i=self.listeAffichageWidget.index(f) 
190         next=i+1
191       except :
192         next=1
193       if (next==len(self.listeAffichageWidget) ): next =0
194       #self.f=next
195       #QTimer.singleShot(1, self.rendVisible)
196       try :
197         self.listeAffichageWidget[next].setFocus(7)
198       except :
199         pass
200
201   def nomChange(self):
202       nom = str(self.LENom.text())
203       nom = nom.strip()
204       if nom == '' : return                  # si pas de nom, on ressort sans rien faire
205       test,mess = self.node.item.nomme_sd(nom)
206       self.editor.affiche_commentaire(mess)
207
208       #Notation scientifique
209       if test :
210         from .politiquesValidation import Validation
211         validation=Validation(self.node,self.editor)
212         validation.AjoutDsDictReelEtape()
213
214   def afficheOptionnel(self):
215       # N a pas de parentQt. doit donc etre redefini
216       liste=self.ajouteMCOptionnelDesBlocs()
217       #print "dans afficheOptionnel", self.monOptionnel
218       # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
219       #if self.monOptionnel == None : return
220       self.monOptionnel.parentCommande=self
221       self.monOptionnel.titre(self.obj.nom)
222       self.monGroupe=self.monOptionnel.afficheOptionnel(liste,self)
223       
224
225   #def focusInEvent(self,event):
226       #print "je mets a jour dans focusInEvent de monWidget Commande "
227   #    if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel
228   #    self.afficheOptionnel()
229
230
231   def reaffiche(self,nodeAVoir=None):
232       # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
233       self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
234       self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
235       self.inhibeExpand=True
236       self.node.affichePanneau()
237       #QTimer.singleShot(1, self.recentre)
238       if nodeAVoir != None and nodeAVoir!=0:
239         self.f=nodeAVoir.fenetre
240         if self.f==None : 
241              newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
242              self.f = newNode.fenetre 
243         if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
244         if self.f != None : self.rendVisible()
245         else : self.recentre()
246       else : self.recentre()
247       self.inhibeExpand=False
248
249
250   def recentre(self):
251       QApplication.processEvents()
252       s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
253       s.horizontalScrollBar().setSliderPosition(self.avantH)
254       s.verticalScrollBar().setSliderPosition(self.avantV)
255
256   def rendVisibleNoeud(self,node):
257       self.f=node.fenetre
258       #print "dans rendVisibleNoeud",self.f
259       QTimer.singleShot(1, self.rendVisible)
260      
261   def rendVisible(self):
262       #print "dans rendVisible",self.f
263       QApplication.processEvents()
264       self.f.setFocus(7)
265       self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
266
267   def afficheCatalogue(self):
268       if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
269       self.racine.affichePanneau()
270       if self.node : self.node.select()
271       else : self.racine.select()
272
273   def afficheApres(self):
274        self.node.selectApres()
275
276   def afficheAvant(self):
277        self.node.selectAvant()
278
279   def setValide(self):
280       if not(hasattr (self,'RBValide')) : return
281       icon = QIcon()
282       if self.node.item.object.isvalid() :
283          icon=QIcon(self.repIcon+"/ast-green-ball.png")
284       else :
285          icon=QIcon(self.repIcon+"/ast-red-ball.png")
286       if self.node.item.GetIconName() == "ast-yellow-square" :
287          icon=QIcon(self.repIcon+"/ast-yel-ball.png")
288       self.LENom.setDisabled(False)
289       if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True)
290       self.RBValide.setIcon(icon)
291
292