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()
155 print self.listeAffichageWidget
156 print "souci ds focusNextPrevChild"
157 if i==0 and next==False and not self.inhibe:
158 if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
159 self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
160 self.listeAffichageWidget[-2].setFocus(7)
166 if i==0 and next==True and not self.inhibe:
167 self.listeAffichageWidget[0].setFocus(7)
173 if i>0 and next==False and not self.inhibe:
174 if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
175 self.listeAffichageWidget[i-1].setFocus(7)
177 return QWidget.focusNextPrevChild(self, next)
179 def etablitOrdre(self):
181 while(i +1 < len(self.listeAffichageWidget)):
182 self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
184 # si on boucle on perd l'ordre
186 def afficheSuivant(self,f):
188 i=self.listeAffichageWidget.index(f)
192 if (next==len(self.listeAffichageWidget) -1 ): next =0
194 #QTimer.singleShot(1, self.rendVisible)
196 self.listeAffichageWidget[next].setFocus(7)
201 nom = str(self.LENom.text())
202 nom = string.strip(nom)
203 if nom == '' : return # si pas de nom, on ressort sans rien faire
204 test,mess = self.node.item.nomme_sd(nom)
205 self.editor.affiche_commentaire(mess)
207 #Notation scientifique
209 from politiquesValidation import Validation
210 validation=Validation(self.node,self.editor)
211 validation.AjoutDsDictReelEtape()
213 def afficheOptionnel(self):
214 # N a pas de parentQt. doit donc etre redefini
215 liste=self.ajouteMCOptionnelDesBlocs()
216 #print "dans afficheOptionnel", self.monOptionnel
217 # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
218 #if self.monOptionnel == None : return
219 self.monOptionnel.parentCommande=self
220 self.monOptionnel.titre(self.obj.nom)
221 self.monGroupe=self.monOptionnel.afficheOptionnel(liste,self)
224 #def focusInEvent(self,event):
225 #print "je mets a jour dans focusInEvent de monWidget Commande "
226 # if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel
227 # self.afficheOptionnel()
230 def reaffiche(self,nodeAVoir=None):
231 # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
232 self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
233 self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
234 self.inhibeExpand=True
235 self.node.affichePanneau()
236 #QTimer.singleShot(1, self.recentre)
237 if nodeAVoir != None and nodeAVoir!=0:
238 self.f=nodeAVoir.fenetre
240 newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
241 self.f = newNode.fenetre
242 if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
243 if self.f != None : self.rendVisible()
244 else : self.recentre()
245 else : self.recentre()
246 self.inhibeExpand=False
250 QApplication.processEvents()
251 s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
252 s.horizontalScrollBar().setSliderPosition(self.avantH)
253 s.verticalScrollBar().setSliderPosition(self.avantV)
255 def rendVisibleNoeud(self,node):
257 print "dans rendVisibleNoeud",self.f
258 QTimer.singleShot(1, self.rendVisible)
260 def rendVisible(self):
261 print "dans rendVisible",self.f
262 QApplication.processEvents()
264 self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
266 def afficheCatalogue(self):
267 if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
268 self.racine.affichePanneau()
269 if self.node : self.node.select()
270 else : self.racine.select()
272 def afficheApres(self):
273 self.node.selectApres()
275 def afficheAvant(self):
276 self.node.selectAvant()
279 if not(hasattr (self,'RBValide')) : return
281 if self.node.item.object.isvalid() :
282 icon=QIcon(self.repIcon+"/ast-green-ball.png")
284 icon=QIcon(self.repIcon+"/ast-red-ball.png")
285 if self.node.item.GetIconName() == "ast-yellow-square" :
286 icon=QIcon(self.repIcon+"/ast-yel-ball.png")
287 self.RBValide.setIcon(icon)