1 # Copyright (C) 2007-2021 EDF R&D
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.
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.
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
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 from __future__ import absolute_import
23 from builtins import str
28 from desWidgetCommande import Ui_WidgetCommande
29 from .groupe import Groupe
30 from .gereIcones import FacultatifOuOptionnel
32 from PyQt5.QtWidgets import QApplication, QWidget, QSpacerItem, QSizePolicy, QRadioButton
33 from PyQt5.QtGui import QFont, QIcon
34 from PyQt5.QtCore import QTimer
35 from PyQt5.QtCore import Qt
39 from Extensions.i18n import tr
46 class MonWidgetCommande(Ui_WidgetCommande,Groupe):
49 def __init__(self,node,editor,etape):
51 self.listeAffichageWidget=[]
54 editor.inhibeSplitter=1
55 Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
56 spacerItem = QSpacerItem(21, 500, QSizePolicy.Expanding, QSizePolicy.Expanding)
57 self.verticalLayoutCommande.addItem(spacerItem)
58 editor.inhibeSplitter=0
60 # Gestion du nom de L OPER si il est nomme
61 if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close()
62 elif (hasattr(etape.definition,'sd_prod') and type(etape.definition.sd_prod)== types.FunctionType):self.LENom.close()
63 elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None:
64 self.LENom.setText(etape.sdnom)
66 self.LENom.setText("")
67 if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange)
68 self.racine=self.node.tree.racine
69 if self.node.item.getIconName() == "ast-red-square" : self.LENom.setDisabled(True)
71 # Gestion de la doc de l objet
72 if node.item.getFr() != "" :
73 self.labelDoc.setText(node.item.getFr())
74 nouvelleSize=self.frameAffichage.height()+60
75 self.frameAffichage.setMinimumHeight(nouvelleSize)
76 self.frameAffichage.resize(self.frameAffichage.width(),nouvelleSize)
77 else : self.labelDoc.close()
80 # Gestion du nom de l etape
81 maPolice= QFont("Times", 10,)
82 self.setFont(maPolice)
83 self.labelNomCommande.setText(tr(self.obj.nom))
86 # Gestion du Frame d affichage des autres commandes
87 if self.editor.maConfiguration.closeAutreCommande == True : self.closeAutreCommande()
89 self.bCatalogue.clicked.connect(self.afficheCatalogue)
90 self.bAvant.clicked.connect(self.afficheAvant)
91 self.bApres.clicked.connect(self.afficheApres)
93 if self.editor.maConfiguration.closeFrameRechercheCommande==True :
94 self.frameAffichage.close()
95 self.closeAutreCommande()
98 self.setAcceptDrops(True)
101 if self.editor.maConfiguration.enleverPoubellePourCommande :
102 self.RBPoubelle.close() # JDC Fige
104 if self.editor.maConfiguration.pasDeMCOptionnels :
105 return # Pas de MC Optionnels pour Carmel
107 from .monWidgetOptionnel import MonWidgetOptionnel
108 if self.editor.widgetOptionnel!= None :
109 self.monOptionnel=self.editor.widgetOptionnel
111 self.editor.inhibeSplitter=1
112 self.monOptionnel=MonWidgetOptionnel(self.editor)
113 self.editor.widgetOptionnel=self.monOptionnel
114 self.editor.splitter.addWidget(self.monOptionnel)
115 self.editor.ajoutOptionnel()
116 self.editor.inhibeSplitter=0
117 self.monOptionnel=self.editor.widgetOptionnel
118 self.afficheOptionnel()
120 #print "fin init de widget Commande"
123 def closeAutreCommande(self):
124 self.bCatalogue.close()
128 def donnePremier(self):
129 #print "dans donnePremier"
130 QApplication.processEvents()
131 if self.listeAffichageWidget != [] :
132 self.listeAffichageWidget[0].setFocus(7)
133 QApplication.processEvents()
134 #print self.focusWidget()
137 def focusNextPrevChild(self, next):
138 # on s assure que ce n est pas un chgt de fenetre
139 #print "je passe dans focusNextPrevChild"
140 if self.editor.fenetreCentraleAffichee != self : return True
141 f = self.focusWidget()
142 if f not in self.listeAffichageWidget :
144 while not hasattr (f,'AAfficher') :
145 if f==None :i=-1; break
147 if hasattr(f,'AAfficher') : f=f.AAfficher
148 if i != -1 : i=self.listeAffichageWidget.index(f)
149 else :i=self.listeAffichageWidget.index(f)
150 if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
152 self.listeAffichageWidget[1].setFocus(7)
155 w.focusPreviousChild()
160 #print self.listeAffichageWidget
161 #print "souci ds focusNextPrevChild"
162 if i==0 and next==False and not self.inhibe:
163 if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
164 self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
165 self.listeAffichageWidget[-2].setFocus(7)
171 if i==0 and next==True and not self.inhibe:
172 self.listeAffichageWidget[0].setFocus(7)
178 if i>0 and next==False and not self.inhibe:
179 if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
180 self.listeAffichageWidget[i-1].setFocus(7)
182 return QWidget.focusNextPrevChild(self, next)
184 def etablitOrdre(self):
186 while(i +1 < len(self.listeAffichageWidget)):
187 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
189 # si on boucle on perd l'ordre
191 def afficheSuivant(self,f):
192 #print ('ds afficheSuivant')
194 i=self.listeAffichageWidget.index(f)
198 if (next==len(self.listeAffichageWidget) ): next =0
200 #QTimer.singleShot(1, self.rendVisible)
202 self.listeAffichageWidget[next].setFocus(7)
207 nom = str(self.LENom.text())
209 if nom == '' : return # si pas de nom, on ressort sans rien faire
210 test,mess = self.node.item.nommeSd(nom)
211 self.editor.afficheCommentaire(mess)
213 #Notation scientifique
215 from .politiquesValidation import Validation
216 validation=Validation(self.node,self.editor)
217 validation.ajoutDsDictReelEtape()
219 def afficheOptionnel(self):
220 # N a pas de parentQt. doit donc etre redefini
221 if self.editor.maConfiguration.closeOptionnel : self.editor.fermeOptionnel()
222 liste,liste_rouge=self.ajouteMCOptionnelDesBlocs()
223 #print "dans afficheOptionnel", self.monOptionnel
224 # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
225 #if self.monOptionnel == None : return
226 self.monOptionnel.parentCommande=self
227 self.monOptionnel.titre(self.obj.nom)
228 self.monGroupe=self.monOptionnel.afficheOptionnel(liste,liste_rouge,self)
231 def focusInEvent(self,event):
232 #print "je mets a jour dans focusInEvent de monWidget Commande "
233 self.afficheOptionnel()
236 def reaffiche(self,nodeAVoir=None):
237 # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
238 self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
239 self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
240 self.inhibeExpand=True
241 self.node.affichePanneau()
242 #QTimer.singleShot(1, self.recentre)
243 if nodeAVoir != None and nodeAVoir!=0:
244 self.f=nodeAVoir.fenetre
246 newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
247 self.f = newNode.fenetre
248 if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
249 if self.f != None : self.rendVisible()
250 else : self.recentre()
251 else : self.recentre()
252 self.inhibeExpand=False
257 QApplication.processEvents()
258 s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
259 s.horizontalScrollBar().setSliderPosition(self.avantH)
260 s.verticalScrollBar().setSliderPosition(self.avantV)
262 def rendVisible(self):
263 QApplication.processEvents()
265 self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
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()
273 def afficheApres(self):
274 self.node.selectApres()
276 def afficheAvant(self):
277 self.node.selectAvant()
280 if not(hasattr (self,'RBValide')) : return
282 if self.node.item.object.isValid() : icon=QIcon(self.repIcon+"/ast-green-ball.png")
283 else : icon=QIcon(self.repIcon+"/ast-red-ball.png")
284 nomIcone = self.node.item.getIconName()
285 if nomIcone == "ast-yellow-square" : icon=QIcon(self.repIcon+"/ast-yel-ball.png")
286 if nomIcone == "ast-red-square" : self.LENom.setDisabled(True)
288 self.LENom.setDisabled(False)
289 self.RBValide.setIcon(icon)
292 def propageChange(self,typeChange):
293 aReecrire=self.propageChangeEnfant(self.node.item.object,typeChange)
294 if aReecrire : self.node.affichePanneau()
296 def propageChangeEnfant(self,mc, typeChange):
297 for enfant in mc.mcListe:
298 if enfant.nature == 'MCSIMP' :
299 if enfant.waitUserAssd():
300 if enfant.definition.type[0] == typeChange: return True
302 if enfant.nature == 'MCList' : enfant=enfant[0]
303 if self.propageChangeEnfant(enfant, typeChange) : return True