Salome HOME
sauve du 20/12
[tools/eficas.git] / InterfaceQT4 / monWidgetCommande.py
1 # Copyright (C) 2007-2013   EDF R&D
2 #
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.
7 #
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.
12 #
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
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19 # Modules Python
20 # Modules Eficas
21 import types
22
23 from desWidgetCommande import Ui_WidgetCommande
24 from groupe import Groupe
25 from gereIcones import FacultatifOuOptionnel
26 from determine import monEnvQT5
27
28 if monEnvQT5:
29    from PyQt5.QtWidgets  import QApplication, QWidget, QSpacerItem, QSizePolicy
30    from PyQt5.QtGui import QFont, QIcon
31    from PyQt5.QtCore import QTimer
32 else :
33    from PyQt4.QtGui import *
34    from PyQt4.QtCore import *
35
36
37 from Extensions.i18n import tr
38 import Accas 
39 import os
40 import string
41
42     
43 # Import des panels
44
45 class MonWidgetCommande(Ui_WidgetCommande,Groupe):
46   """
47   """
48   def __init__(self,node,editor,etape):
49       self.listeAffichageWidget=[]
50       self.inhibe=0
51       self.ensure=0
52       editor.inhibeSplitter=1
53       Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
54       editor.inhibeSplitter=0
55
56       self.frameAffichage.setMinimumHeight(20)
57       if node.item.get_fr() != "" : self.labelDoc.setText(node.item.get_fr())
58       else : 
59         self.labelDoc.close()
60         self.frameAffichage.resize(self.frameAffichage.width(),50)
61       
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("")
68
69
70       maPolice= QFont("Times", 10,)
71       self.setFont(maPolice)
72       self.labelNomCommande.setText(tr(self.obj.nom))
73
74
75       if self.editor.closeFrameRechercheCommande==True : self.closeAutreCommande()
76       else :
77         if monEnvQT5 :
78          try :
79            self.bCatalogue.clicked.connect(self.afficheCatalogue)
80            self.bAvant.clicked.connect(self.afficheAvant)
81            self.bApres.clicked.connect(self.afficheApres)
82          except :
83            pass
84          self.LENom.returnPressed.connect(self.nomChange)
85         else : 
86          try :
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)
90          except :
91             pass
92          self.connect(self.LENom,SIGNAL("returnPressed()"),self.nomChange)
93    
94       if self.editor.code in ['Adao','ADAO'] and self.editor.closeFrameRechercheCommande==True  : 
95                       self.frameAffichage.close()
96
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)
100
101       self.setAcceptDrops(True)
102       self.etablitOrdre()
103
104       if self.editor.code == "CARMELCND" : 
105          self.RBPoubelle.close() # JDC Fige
106          return                  # Pas de MC Optionnels pour Carmel
107
108       from monWidgetOptionnel import MonWidgetOptionnel
109       if self.editor.widgetOptionnel!= None : 
110         self.monOptionnel=self.editor.widgetOptionnel
111       else :
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()
118
119       #print "fin init de widget Commande"
120       
121
122   def closeAutreCommande(self):
123       self.bCatalogue.close()
124       self.bAvant.close()
125       self.bApres.close()
126
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()
134
135
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
140       f=self.focusWidget()
141       if f not in self.listeAffichageWidget :
142          i=0
143          while not hasattr (f,'AAfficher') :
144            if f==None :i=-1; break
145            f=f.parentWidget()
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: 
150          try :
151            self.listeAffichageWidget[1].setFocus(7)
152            w=self.focusWidget()
153            self.inhibe=1
154            w.focusPreviousChild()
155            self.inhibe=0
156            return True
157          except :
158            pass
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)
165          self.inhibe=1
166          w=self.focusWidget()
167          w.focusNextChild()
168          self.inhibe=0
169          return True
170       if i==0 and next==True and not self.inhibe:
171          self.listeAffichageWidget[0].setFocus(7)
172          self.inhibe=1
173          w=self.focusWidget()
174          w.focusNextChild()
175          self.inhibe=0
176          return True
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)
180            return True
181       return QWidget.focusNextPrevChild(self, next)
182
183   def etablitOrdre(self):
184       i=0
185       while(i +1 < len(self.listeAffichageWidget)):
186          self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
187          i=i+1
188       # si on boucle on perd l'ordre
189  
190   def  afficheSuivant(self,f):
191       try :
192         i=self.listeAffichageWidget.index(f) 
193         next=i+1
194       except :
195         next=1
196       if (next==len(self.listeAffichageWidget) ): next =0
197       #self.f=next
198       #QTimer.singleShot(1, self.rendVisible)
199       try :
200         self.listeAffichageWidget[next].setFocus(7)
201       except :
202         pass
203
204   def nomChange(self):
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)
210
211       #Notation scientifique
212       if test :
213         from politiquesValidation import Validation
214         validation=Validation(self.node,self.editor)
215         validation.AjoutDsDictReelEtape()
216
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)
226       
227
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()
232
233
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
243         if self.f==None : 
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
251
252
253   def recentre(self):
254       QApplication.processEvents()
255       s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
256       s.horizontalScrollBar().setSliderPosition(self.avantH)
257       s.verticalScrollBar().setSliderPosition(self.avantV)
258
259   def rendVisibleNoeud(self,node):
260       self.f=node.fenetre
261       #print "dans rendVisibleNoeud",self.f
262       QTimer.singleShot(1, self.rendVisible)
263      
264   def rendVisible(self):
265       #print "dans rendVisible",self.f
266       QApplication.processEvents()
267       self.f.setFocus(7)
268       self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
269
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()
275
276   def afficheApres(self):
277        self.node.selectApres()
278
279   def afficheAvant(self):
280        self.node.selectAvant()
281
282   def setValide(self):
283       if not(hasattr (self,'RBValide')) : return
284       icon = QIcon()
285       if self.node.item.object.isvalid() :
286          icon=QIcon(self.repIcon+"/ast-green-ball.png")
287       else :
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)
294
295