1 # Copyright (C) 2007-2013 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
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
57 self.frameAffichage.setMinimumHeight(20)
58 if node.item.get_fr() != "" : self.labelDoc.setText(node.item.get_fr())
61 self.frameAffichage.resize(self.frameAffichage.width(),50)
63 #if (etape.get_type_produit()==None): self.LENom.close()
64 #test,mess = self.node.item.nomme_sd('ee')
65 if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close()
66 elif (hasattr(etape.definition,'sd_prod') and type(etape.definition.sd_prod)== types.FunctionType):self.LENom.close()
67 elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None: self.LENom.setText(etape.sdnom)
68 else : self.LENom.setText("")
71 maPolice= QFont("Times", 10,)
72 self.setFont(maPolice)
73 self.labelNomCommande.setText(tr(self.obj.nom))
76 if self.editor.closeAutreCommande==True : self.closeAutreCommande()
79 self.bCatalogue.clicked.connect(self.afficheCatalogue)
80 self.bAvant.clicked.connect(self.afficheAvant)
81 self.bApres.clicked.connect(self.afficheApres)
84 self.LENom.returnPressed.connect(self.nomChange)
86 if self.editor.code in ['Adao','ADAO'] and self.editor.closeFrameRechercheCommande==True :
87 self.frameAffichage.close()
89 if self.editor.code in ['CARMELCND',] : self.closeAutreCommande()
90 self.racine=self.node.tree.racine
91 if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True)
93 self.setAcceptDrops(True)
96 if self.editor.code == "CARMELCND" :
97 self.RBPoubelle.close() # JDC Fige
98 return # Pas de MC Optionnels pour Carmel
100 from .monWidgetOptionnel import MonWidgetOptionnel
101 if self.editor.widgetOptionnel!= None :
102 self.monOptionnel=self.editor.widgetOptionnel
104 self.editor.inhibeSplitter=1
105 self.monOptionnel=MonWidgetOptionnel(self.editor)
106 self.editor.widgetOptionnel=self.monOptionnel
107 self.editor.splitter.addWidget(self.monOptionnel)
108 self.editor.ajoutOptionnel()
109 self.editor.inhibeSplitter=0
110 self.afficheOptionnel()
111 #self.editor.restoreSplitterSizes()
113 #print "fin init de widget Commande"
116 def closeAutreCommande(self):
117 self.bCatalogue.close()
121 def donnePremier(self):
122 #print "dans donnePremier"
123 QApplication.processEvents()
124 if self.listeAffichageWidget != [] :
125 self.listeAffichageWidget[0].setFocus(7)
126 QApplication.processEvents()
127 #print self.focusWidget()
130 def focusNextPrevChild(self, next):
131 # on s assure que ce n est pas un chgt de fenetre
132 #print "je passe dans focusNextPrevChild"
133 if self.editor.fenetreCentraleAffichee != self : return True
135 if f not in self.listeAffichageWidget :
137 while not hasattr (f,'AAfficher') :
138 if f==None :i=-1; break
140 if hasattr(f,'AAfficher') : f=f.AAfficher
141 if i != -1 : i=self.listeAffichageWidget.index(f)
142 else :i=self.listeAffichageWidget.index(f)
143 if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
145 self.listeAffichageWidget[1].setFocus(7)
148 w.focusPreviousChild()
153 #print self.listeAffichageWidget
154 #print "souci ds focusNextPrevChild"
155 if i==0 and next==False and not self.inhibe:
156 if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
157 self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
158 self.listeAffichageWidget[-2].setFocus(7)
164 if i==0 and next==True and not self.inhibe:
165 self.listeAffichageWidget[0].setFocus(7)
171 if i>0 and next==False and not self.inhibe:
172 if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
173 self.listeAffichageWidget[i-1].setFocus(7)
175 return QWidget.focusNextPrevChild(self, next)
177 def etablitOrdre(self):
179 while(i +1 < len(self.listeAffichageWidget)):
180 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
182 # si on boucle on perd l'ordre
184 def afficheNieme(self,n):
185 #print ('ds afficheNieme')
186 self.listeAffichageWidget[n].setFocus(7)
188 def afficheSuivant(self,f):
189 #print ('ds afficheSuivant')
191 i=self.listeAffichageWidget.index(f)
195 if (next==len(self.listeAffichageWidget) ): next =0
197 #QTimer.singleShot(1, self.rendVisible)
199 self.listeAffichageWidget[next].setFocus(7)
204 nom = str(self.LENom.text())
206 if nom == '' : return # si pas de nom, on ressort sans rien faire
207 test,mess = self.node.item.nomme_sd(nom)
208 self.editor.affiche_commentaire(mess)
210 #Notation scientifique
212 from .politiquesValidation import Validation
213 validation=Validation(self.node,self.editor)
214 validation.AjoutDsDictReelEtape()
216 def afficheOptionnel(self):
217 # N a pas de parentQt. doit donc etre redefini
218 liste=self.ajouteMCOptionnelDesBlocs()
219 #print "dans afficheOptionnel", self.monOptionnel
220 # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
221 #if self.monOptionnel == None : return
222 self.monOptionnel.parentCommande=self
223 self.monOptionnel.titre(self.obj.nom)
224 self.monGroupe=self.monOptionnel.afficheOptionnel(liste,self)
227 def focusInEvent(self,event):
228 #print "je mets a jour dans focusInEvent de monWidget Commande "
229 if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel
230 self.afficheOptionnel()
233 def reaffiche(self,nodeAVoir=None):
234 # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
235 self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
236 self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
237 self.inhibeExpand=True
238 self.node.affichePanneau()
239 #QTimer.singleShot(1, self.recentre)
240 if nodeAVoir != None and nodeAVoir!=0:
241 self.f=nodeAVoir.fenetre
243 newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
244 self.f = newNode.fenetre
245 if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
246 if self.f != None : self.rendVisible()
247 else : self.recentre()
248 else : self.recentre()
249 self.inhibeExpand=False
251 def reafficheSeulement(self,nodeAReafficher,index):
252 #print ('ds reafficheSeulement', nodeAReafficher)
253 parentNodeAReafficher=nodeAReafficher.parentQt
254 index=parentNodeAReafficher.commandesLayout.indexOf(nodeAReafficher)
255 oldFenetre=nodeAReafficher.node.fenetre
256 newWidget=nodeAReafficher.node.getPanelGroupe(parentNodeAReafficher,self,index)
257 nodeAReafficher.node.fenetre=newWidget
258 oldFenetre.setParent(None)
260 oldFenetre.deleteLater()
261 #print ("fin pour " , self.node.item.nom)
265 QApplication.processEvents()
266 s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
267 s.horizontalScrollBar().setSliderPosition(self.avantH)
268 s.verticalScrollBar().setSliderPosition(self.avantV)
270 def rendVisibleNoeud(self,node):
272 #print "dans rendVisibleNoeud",self.f
273 QTimer.singleShot(1, self.rendVisible)
275 def rendVisible(self):
276 #print "dans rendVisible",self.f
277 QApplication.processEvents()
279 self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
281 def afficheCatalogue(self):
282 if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
283 self.racine.affichePanneau()
284 if self.node : self.node.select()
285 else : self.racine.select()
287 def afficheApres(self):
288 self.node.selectApres()
290 def afficheAvant(self):
291 self.node.selectAvant()
294 if not(hasattr (self,'RBValide')) : return
296 if self.node.item.object.isvalid() :
297 icon=QIcon(self.repIcon+"/ast-green-ball.png")
299 icon=QIcon(self.repIcon+"/ast-red-ball.png")
300 if self.node.item.GetIconName() == "ast-yellow-square" :
301 icon=QIcon(self.repIcon+"/ast-yel-ball.png")
302 self.LENom.setDisabled(False)
303 if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True)
304 self.RBValide.setIcon(icon)