1 # Copyright (C) 2007-2017 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):
50 self.listeAffichageWidget=[]
53 editor.inhibeSplitter=1
54 Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
55 editor.inhibeSplitter=0
58 if node.item.getFr() != "" :
59 self.labelDoc.setText(node.item.getFr())
61 else : self.labelDoc.close()
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:
66 self.LENom.setText(etape.sdnom)
69 self.LENom.setText("")
72 nouvelleSize=self.frameAffichage.height()+60
73 self.frameAffichage.setMinimumHeight(nouvelleSize)
74 self.frameAffichage.resize(self.frameAffichage.width(),nouvelleSize)
78 maPolice= QFont("Times", 10,)
79 self.setFont(maPolice)
80 self.labelNomCommande.setText(tr(self.obj.nom))
83 if self.editor.maConfiguration.closeAutreCommande == True : self.closeAutreCommande()
86 self.bCatalogue.clicked.connect(self.afficheCatalogue)
87 self.bAvant.clicked.connect(self.afficheAvant)
88 self.bApres.clicked.connect(self.afficheApres)
92 if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange)
94 if self.editor.code in ['Adao','ADAO'] and self.editor.maConfiguration.closeFrameRechercheCommande==True :
95 self.frameAffichage.close()
96 if self.editor.maConfiguration.closeFrameRechercheCommande==True :
97 self.closeAutreCommande()
99 if self.editor.code in ['CARMELCND',] : self.closeAutreCommande()
100 self.racine=self.node.tree.racine
101 if self.node.item.getIconName() == "ast-red-square" : self.LENom.setDisabled(True)
103 self.setAcceptDrops(True)
106 if self.editor.code == "CARMELCND" :
107 self.RBPoubelle.close() # JDC Fige
108 return # Pas de MC Optionnels pour Carmel
110 from .monWidgetOptionnel import MonWidgetOptionnel
111 if self.editor.widgetOptionnel!= None :
112 self.monOptionnel=self.editor.widgetOptionnel
114 self.editor.inhibeSplitter=1
115 self.monOptionnel=MonWidgetOptionnel(self.editor)
116 self.editor.widgetOptionnel=self.monOptionnel
117 self.editor.splitter.addWidget(self.monOptionnel)
118 self.editor.ajoutOptionnel()
119 self.editor.inhibeSplitter=0
120 self.monOptionnel=self.editor.widgetOptionnel
121 self.afficheOptionnel()
122 spacerItem = QSpacerItem(21, 500, QSizePolicy.Expanding, QSizePolicy.Expanding)
123 #spacerItem = QSpacerItem(21, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)
124 #self.commandesLayout.addItem(spacerItem)
125 self.verticalLayoutCommande.addItem(spacerItem)
127 #self.editor.restoreSplitterSizes()
129 #print "fin init de widget Commande"
132 def closeAutreCommande(self):
133 self.bCatalogue.close()
137 def donnePremier(self):
138 #print "dans donnePremier"
139 QApplication.processEvents()
140 if self.listeAffichageWidget != [] :
141 self.listeAffichageWidget[0].setFocus(7)
142 QApplication.processEvents()
143 #print self.focusWidget()
146 def focusNextPrevChild(self, next):
147 # on s assure que ce n est pas un chgt de fenetre
148 #print "je passe dans focusNextPrevChild"
149 if self.editor.fenetreCentraleAffichee != self : return True
151 if f not in self.listeAffichageWidget :
153 while not hasattr (f,'AAfficher') :
154 if f==None :i=-1; break
156 if hasattr(f,'AAfficher') : f=f.AAfficher
157 if i != -1 : i=self.listeAffichageWidget.index(f)
158 else :i=self.listeAffichageWidget.index(f)
159 if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
161 self.listeAffichageWidget[1].setFocus(7)
164 w.focusPreviousChild()
169 #print self.listeAffichageWidget
170 #print "souci ds focusNextPrevChild"
171 if i==0 and next==False and not self.inhibe:
172 if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
173 self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
174 self.listeAffichageWidget[-2].setFocus(7)
180 if i==0 and next==True and not self.inhibe:
181 self.listeAffichageWidget[0].setFocus(7)
187 if i>0 and next==False and not self.inhibe:
188 if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
189 self.listeAffichageWidget[i-1].setFocus(7)
191 return QWidget.focusNextPrevChild(self, next)
193 def etablitOrdre(self):
195 while(i +1 < len(self.listeAffichageWidget)):
196 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
198 # si on boucle on perd l'ordre
200 def afficheNieme(self,n):
201 #print ('ds afficheNieme')
202 self.listeAffichageWidget[n].setFocus(7)
204 def afficheSuivant(self,f):
205 #print ('ds afficheSuivant')
207 i=self.listeAffichageWidget.index(f)
211 if (next==len(self.listeAffichageWidget) ): next =0
213 #QTimer.singleShot(1, self.rendVisible)
215 self.listeAffichageWidget[next].setFocus(7)
220 nom = str(self.LENom.text())
222 if nom == '' : return # si pas de nom, on ressort sans rien faire
223 test,mess = self.node.item.nommeSd(nom)
224 self.editor.afficheCommentaire(mess)
226 #Notation scientifique
228 from .politiquesValidation import Validation
229 validation=Validation(self.node,self.editor)
230 validation.ajoutDsDictReelEtape()
232 def afficheOptionnel(self):
233 # N a pas de parentQt. doit donc etre redefini
234 liste,liste_rouge=self.ajouteMCOptionnelDesBlocs()
235 #print "dans afficheOptionnel", self.monOptionnel
236 # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
237 #if self.monOptionnel == None : return
238 self.monOptionnel.parentCommande=self
239 self.monOptionnel.titre(self.obj.nom)
240 self.monGroupe=self.monOptionnel.afficheOptionnel(liste,liste_rouge,self)
243 def focusInEvent(self,event):
244 #print "je mets a jour dans focusInEvent de monWidget Commande "
245 if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel
246 self.afficheOptionnel()
249 def reaffiche(self,nodeAVoir=None):
250 # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
251 self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
252 self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
253 self.inhibeExpand=True
254 self.node.affichePanneau()
255 #QTimer.singleShot(1, self.recentre)
256 if nodeAVoir != None and nodeAVoir!=0:
257 self.f=nodeAVoir.fenetre
259 newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
260 self.f = newNode.fenetre
261 if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
262 if self.f != None : self.rendVisible()
263 else : self.recentre()
264 else : self.recentre()
265 self.inhibeExpand=False
267 def reafficheSeulement(self,nodeAReafficher,index):
268 #print ('ds reafficheSeulement', nodeAReafficher)
269 parentNodeAReafficher=nodeAReafficher.parentQt
270 index=parentNodeAReafficher.commandesLayout.indexOf(nodeAReafficher)
271 oldFenetre=nodeAReafficher.node.fenetre
272 newWidget=nodeAReafficher.node.getPanelGroupe(parentNodeAReafficher,self,index)
273 nodeAReafficher.node.fenetre=newWidget
274 oldFenetre.setParent(None)
276 oldFenetre.deleteLater()
277 #print ("fin pour " , self.node.item.nom)
281 QApplication.processEvents()
282 s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
283 s.horizontalScrollBar().setSliderPosition(self.avantH)
284 s.verticalScrollBar().setSliderPosition(self.avantV)
286 def rendVisibleNoeud(self,node):
288 #print "dans rendVisibleNoeud",self.f
289 QTimer.singleShot(1, self.rendVisible)
291 def rendVisible(self):
292 #print "dans rendVisible",self.f
293 QApplication.processEvents()
295 self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
297 def afficheCatalogue(self):
298 if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
299 self.racine.affichePanneau()
300 if self.node : self.node.select()
301 else : self.racine.select()
303 def afficheApres(self):
304 self.node.selectApres()
306 def afficheAvant(self):
307 self.node.selectAvant()
310 if not(hasattr (self,'RBValide')) : return
312 if self.node.item.object.isValid() : icon=QIcon(self.repIcon+"/ast-green-ball.png")
313 else : icon=QIcon(self.repIcon+"/ast-red-ball.png")
314 nomIcone = self.node.item.getIconName()
315 if nomIcone == "ast-yellow-square" : icon=QIcon(self.repIcon+"/ast-yel-ball.png")
316 if nomIcone == "ast-red-square" : self.LENom.setDisabled(True)
318 self.LENom.setDisabled(False)
319 self.RBValide.setIcon(icon)