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
23 from desWidgetCommande import Ui_WidgetCommande
24 from groupe import Groupe
25 from gereIcones import FacultatifOuOptionnel
26 from determine import monEnvQT5
29 from PyQt5.QtWidgets import QApplication, QWidget, QSpacerItem, QSizePolicy
30 from PyQt5.QtGui import QFont, QIcon
31 from PyQt5.QtCore import QTimer
33 from PyQt4.QtGui import *
34 from PyQt4.QtCore import *
37 from Extensions.i18n import tr
45 class MonWidgetCommande(Ui_WidgetCommande,Groupe):
48 def __init__(self,node,editor,etape):
49 self.listeAffichageWidget=[]
52 editor.inhibeSplitter=1
53 Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
54 editor.inhibeSplitter=0
56 self.frameAffichage.setMinimumHeight(20)
57 if node.item.get_fr() != "" : self.labelDoc.setText(node.item.get_fr())
60 self.frameAffichage.resize(self.frameAffichage.width(),50)
62 #if (etape.get_type_produit()==None): self.LENom.close()
63 test,mess = self.node.item.nomme_sd('ee')
64 if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close()
65 elif (hasattr(etape.definition,'sd_prod') and type(etape.definition.sd_prod)== types.FunctionType):self.LENom.close()
66 elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None: self.LENom.setText(etape.sdnom)
67 else : self.LENom.setText("")
70 maPolice= QFont("Times", 10,)
71 self.setFont(maPolice)
72 self.labelNomCommande.setText(tr(self.obj.nom))
75 if self.editor.closeFrameRechercheCommande==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)
87 self.connect(self.bCatalogue,SIGNAL("clicked()"), self.afficheCatalogue)
88 self.connect(self.bAvant,SIGNAL("clicked()"), self.afficheAvant)
89 self.connect(self.bApres,SIGNAL("clicked()"), self.afficheApres)
92 self.connect(self.LENom,SIGNAL("returnPressed()"),self.nomChange)
94 if self.editor.code in ['Adao','ADAO'] and self.editor.closeFrameRechercheCommande==True :
95 self.frameAffichage.close()
97 if self.editor.code in ['CARMELCND',] : self.closeAutreCommande()
98 self.racine=self.node.tree.racine
99 if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True)
101 self.setAcceptDrops(True)
104 if self.editor.code == "CARMELCND" :
105 self.RBPoubelle.close() # JDC Fige
106 return # Pas de MC Optionnels pour Carmel
108 from monWidgetOptionnel import MonWidgetOptionnel
109 if self.editor.widgetOptionnel!= None :
110 self.monOptionnel=self.editor.widgetOptionnel
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.afficheOptionnel()
117 #self.editor.restoreSplitterSizes()
119 #print "fin init de widget Commande"
122 def closeAutreCommande(self):
123 self.bCatalogue.close()
127 def donnePremier(self):
128 #print "dans donnePremier"
129 QApplication.processEvents()
130 if self.listeAffichageWidget != [] :
131 self.listeAffichageWidget[0].setFocus(7)
132 QApplication.processEvents()
133 #print self.focusWidget()
136 def focusNextPrevChild(self, next):
137 # on s assure que ce n est pas un chgt de fenetre
138 #print "je passe dans focusNextPrevChild"
139 if self.editor.fenetreCentraleAffichee != self : return True
141 if f not in self.listeAffichageWidget :
143 while not hasattr (f,'AAfficher') :
144 if f==None :i=-1; break
146 if hasattr(f,'AAfficher') : f=f.AAfficher
147 if i != -1 : i=self.listeAffichageWidget.index(f)
148 else :i=self.listeAffichageWidget.index(f)
149 if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
151 self.listeAffichageWidget[1].setFocus(7)
154 w.focusPreviousChild()
159 #print self.listeAffichageWidget
160 #print "souci ds focusNextPrevChild"
161 if i==0 and next==False and not self.inhibe:
162 if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
163 self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
164 self.listeAffichageWidget[-2].setFocus(7)
170 if i==0 and next==True and not self.inhibe:
171 self.listeAffichageWidget[0].setFocus(7)
177 if i>0 and next==False and not self.inhibe:
178 if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
179 self.listeAffichageWidget[i-1].setFocus(7)
181 return QWidget.focusNextPrevChild(self, next)
183 def etablitOrdre(self):
185 while(i +1 < len(self.listeAffichageWidget)):
186 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
188 # si on boucle on perd l'ordre
190 def afficheSuivant(self,f):
192 i=self.listeAffichageWidget.index(f)
196 if (next==len(self.listeAffichageWidget) ): next =0
198 #QTimer.singleShot(1, self.rendVisible)
200 self.listeAffichageWidget[next].setFocus(7)
205 nom = str(self.LENom.text())
206 nom = string.strip(nom)
207 if nom == '' : return # si pas de nom, on ressort sans rien faire
208 test,mess = self.node.item.nomme_sd(nom)
209 self.editor.affiche_commentaire(mess)
211 #Notation scientifique
213 from politiquesValidation import Validation
214 validation=Validation(self.node,self.editor)
215 validation.AjoutDsDictReelEtape()
217 def afficheOptionnel(self):
218 # N a pas de parentQt. doit donc etre redefini
219 liste=self.ajouteMCOptionnelDesBlocs()
220 #print "dans afficheOptionnel", self.monOptionnel
221 # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
222 #if self.monOptionnel == None : return
223 self.monOptionnel.parentCommande=self
224 self.monOptionnel.titre(self.obj.nom)
225 self.monGroupe=self.monOptionnel.afficheOptionnel(liste,self)
228 #def focusInEvent(self,event):
229 #print "je mets a jour dans focusInEvent de monWidget Commande "
230 # if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel
231 # self.afficheOptionnel()
234 def reaffiche(self,nodeAVoir=None):
235 # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
236 self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
237 self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
238 self.inhibeExpand=True
239 self.node.affichePanneau()
240 #QTimer.singleShot(1, self.recentre)
241 if nodeAVoir != None and nodeAVoir!=0:
242 self.f=nodeAVoir.fenetre
244 newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
245 self.f = newNode.fenetre
246 if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
247 if self.f != None : self.rendVisible()
248 else : self.recentre()
249 else : self.recentre()
250 self.inhibeExpand=False
254 QApplication.processEvents()
255 s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
256 s.horizontalScrollBar().setSliderPosition(self.avantH)
257 s.verticalScrollBar().setSliderPosition(self.avantV)
259 def rendVisibleNoeud(self,node):
261 #print "dans rendVisibleNoeud",self.f
262 QTimer.singleShot(1, self.rendVisible)
264 def rendVisible(self):
265 #print "dans rendVisible",self.f
266 QApplication.processEvents()
268 self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
270 def afficheCatalogue(self):
271 if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
272 self.racine.affichePanneau()
273 if self.node : self.node.select()
274 else : self.racine.select()
276 def afficheApres(self):
277 self.node.selectApres()
279 def afficheAvant(self):
280 self.node.selectAvant()
283 if not(hasattr (self,'RBValide')) : return
285 if self.node.item.object.isvalid() :
286 icon=QIcon(self.repIcon+"/ast-green-ball.png")
288 icon=QIcon(self.repIcon+"/ast-red-ball.png")
289 if self.node.item.GetIconName() == "ast-yellow-square" :
290 icon=QIcon(self.repIcon+"/ast-yel-ball.png")
291 self.LENom.setDisabled(False)
292 if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True)
293 self.RBValide.setIcon(icon)