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
22 from desWidgetCommande import Ui_WidgetCommande
23 from groupe import Groupe
24 from gereIcones import FacultatifOuOptionnel
25 from determine import monEnvQT5
28 from PyQt5.QtWidgets import QApplication, QWidget, QSpacerItem, QSizePolicy
29 from PyQt5.QtGui import QFont, QIcon
30 from PyQt5.QtCore import QTimer
32 from PyQt4.QtGui import *
33 from PyQt4.QtCore import *
36 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 elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None: self.LENom.setText(etape.sdnom)
63 else : self.LENom.setText("")
65 maPolice= QFont("Times", 10,)
66 self.setFont(maPolice)
67 self.labelNomCommande.setText(tr(self.obj.nom))
69 self.commandesLayout.addStretch()
70 self.commandesLayout.focusInEvent=self.focusInEvent
71 self.scrollAreaCommandes.focusInEvent=self.focusInEvent
74 if self.editor.closeFrameRechercheCommande==True : self.closeAutreCommande()
78 self.bCatalogue.clicked.connect(self.afficheCatalogue)
79 self.bAvant.clicked.connect(self.afficheAvant)
80 self.bApres.clicked.connect(self.afficheApres)
83 self.LENom.returnPressed.connect(self.nomChange)
86 self.connect(self.bCatalogue,SIGNAL("clicked()"), self.afficheCatalogue)
87 self.connect(self.bAvant,SIGNAL("clicked()"), self.afficheAvant)
88 self.connect(self.bApres,SIGNAL("clicked()"), self.afficheApres)
91 self.connect(self.LENom,SIGNAL("returnPressed()"),self.nomChange)
93 if self.editor.code in ['CARMELCND',] : self.closeAutreCommande()
94 self.racine=self.node.tree.racine
95 if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True)
97 self.setAcceptDrops(True)
100 if self.editor.code == "CARMELCND" :
101 self.RBPoubelle.close() # JDC Fige
102 return # Pas de MC Optionnels pour Carmel
104 from monWidgetOptionnel import MonWidgetOptionnel
105 if self.editor.widgetOptionnel!= None :
106 self.monOptionnel=self.editor.widgetOptionnel
108 self.monOptionnel=MonWidgetOptionnel(self)
109 self.editor.widgetOptionnel=self.monOptionnel
110 self.editor.inhibeSplitter=1
111 self.editor.splitter.addWidget(self.monOptionnel)
112 self.editor.inhibeSplitter=0
113 self.editor.ajoutOptionnel()
114 self.afficheOptionnel()
116 self.editor.restoreSplitterSizes()
117 #print "fin init de widget Commande"
119 def closeAutreCommande(self):
120 self.bCatalogue.close()
124 def donnePremier(self):
125 #print "dans donnePremier"
126 QApplication.processEvents()
127 if self.listeAffichageWidget != [] :
128 self.listeAffichageWidget[0].setFocus(7)
129 QApplication.processEvents()
130 #print self.focusWidget()
133 def focusNextPrevChild(self, next):
134 # on s assure que ce n est pas un chgt de fenetre
135 #print "je passe dans focusNextPrevChild"
136 if self.editor.fenetreCentraleAffichee != self : return True
138 if f not in self.listeAffichageWidget :
140 while not hasattr (f,'AAfficher') :
141 if f==None :i=-1; break
143 if hasattr(f,'AAfficher') : f=f.AAfficher
144 if i != -1 : i=self.listeAffichageWidget.index(f)
145 else :i=self.listeAffichageWidget.index(f)
146 if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe:
148 self.listeAffichageWidget[1].setFocus(7)
151 w.focusPreviousChild()
156 #print self.listeAffichageWidget
157 #print "souci ds focusNextPrevChild"
158 if i==0 and next==False and not self.inhibe:
159 if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
160 self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
161 self.listeAffichageWidget[-2].setFocus(7)
167 if i==0 and next==True and not self.inhibe:
168 self.listeAffichageWidget[0].setFocus(7)
174 if i>0 and next==False and not self.inhibe:
175 if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
176 self.listeAffichageWidget[i-1].setFocus(7)
178 return QWidget.focusNextPrevChild(self, next)
180 def etablitOrdre(self):
182 while(i +1 < len(self.listeAffichageWidget)):
183 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
185 # si on boucle on perd l'ordre
187 def afficheSuivant(self,f):
189 i=self.listeAffichageWidget.index(f)
193 if (next==len(self.listeAffichageWidget) -1 ): next =0
195 #QTimer.singleShot(1, self.rendVisible)
197 self.listeAffichageWidget[next].setFocus(7)
202 nom = str(self.LENom.text())
203 nom = string.strip(nom)
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.RBValide.setIcon(icon)