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
37 from Extensions.i18n import tr
44 class MonWidgetCommande(Ui_WidgetCommande,Groupe):
47 def __init__(self,node,editor,etape):
48 self.listeAffichageWidget=[]
51 editor.inhibeSplitter=1
52 Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
53 editor.inhibeSplitter=0
55 self.frameAffichage.setMinimumHeight(20)
56 if node.item.get_fr() != "" : self.labelDoc.setText(node.item.get_fr())
59 self.frameAffichage.resize(self.frameAffichage.width(),50)
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("")
69 maPolice= QFont("Times", 10,)
70 self.setFont(maPolice)
71 self.labelNomCommande.setText(tr(self.obj.nom))
74 if self.editor.closeFrameRechercheCommande==True : self.closeAutreCommande()
77 self.bCatalogue.clicked.connect(self.afficheCatalogue)
78 self.bAvant.clicked.connect(self.afficheAvant)
79 self.bApres.clicked.connect(self.afficheApres)
82 self.LENom.returnPressed.connect(self.nomChange)
84 if self.editor.code in ['Adao','ADAO'] and self.editor.closeFrameRechercheCommande==True :
85 self.frameAffichage.close()
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)
91 self.setAcceptDrops(True)
94 if self.editor.code == "CARMELCND" :
95 self.RBPoubelle.close() # JDC Fige
96 return # Pas de MC Optionnels pour Carmel
98 from .monWidgetOptionnel import MonWidgetOptionnel
99 if self.editor.widgetOptionnel!= None :
100 self.monOptionnel=self.editor.widgetOptionnel
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()
111 #print "fin init de widget Commande"
114 def closeAutreCommande(self):
115 self.bCatalogue.close()
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()
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
133 if f not in self.listeAffichageWidget :
135 while not hasattr (f,'AAfficher') :
136 if f==None :i=-1; break
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:
143 self.listeAffichageWidget[1].setFocus(7)
146 w.focusPreviousChild()
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)
162 if i==0 and next==True and not self.inhibe:
163 self.listeAffichageWidget[0].setFocus(7)
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)
173 return QWidget.focusNextPrevChild(self, next)
175 def etablitOrdre(self):
177 while(i +1 < len(self.listeAffichageWidget)):
178 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
180 # si on boucle on perd l'ordre
182 def afficheNieme(self,n):
183 #print ('ds afficheNieme')
184 self.listeAffichageWidget[n].setFocus(7)
186 def afficheSuivant(self,f):
187 #print ('ds afficheSuivant')
189 i=self.listeAffichageWidget.index(f)
193 if (next==len(self.listeAffichageWidget) ): next =0
195 #QTimer.singleShot(1, self.rendVisible)
197 self.listeAffichageWidget[next].setFocus(7)
202 nom = str(self.LENom.text())
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)
208 #Notation scientifique
210 from .politiquesValidation import Validation
211 validation=Validation(self.node,self.editor)
212 validation.AjoutDsDictReelEtape()
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)
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()
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
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
251 QApplication.processEvents()
252 s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
253 s.horizontalScrollBar().setSliderPosition(self.avantH)
254 s.verticalScrollBar().setSliderPosition(self.avantV)
256 def rendVisibleNoeud(self,node):
258 #print "dans rendVisibleNoeud",self.f
259 QTimer.singleShot(1, self.rendVisible)
261 def rendVisible(self):
262 #print "dans rendVisible",self.f
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() :
283 icon=QIcon(self.repIcon+"/ast-green-ball.png")
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)