Salome HOME
4bf5aa534a9f1791916a9add109d4d59189fc67a
[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
22 from desWidgetCommande import Ui_WidgetCommande
23 from groupe import Groupe
24 from gereIcones import FacultatifOuOptionnel
25 from determine import monEnvQT5
26
27 if monEnvQT5:
28    from PyQt5.QtWidgets  import QApplication, QWidget
29    from PyQt5.QtGui import QFont, QIcon
30    from PyQt5.QtCore import QTimer
31 else :
32    from PyQt4.QtGui import *
33    from PyQt4.QtCore import *
34
35
36 from Extensions.i18n import tr
37 import Accas 
38 import os
39 import string
40
41     
42 # Import des panels
43
44 class MonWidgetCommande(Ui_WidgetCommande,Groupe):
45   """
46   """
47   def __init__(self,node,editor,etape):
48       #print "MonWidgetCommande ", self
49       self.listeAffichageWidget=[]
50       self.inhibe=0
51       self.ensure=0
52       Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self)
53
54       if node.item.get_fr() != "" : self.labelDoc.setText(node.item.get_fr())
55       else : self.labelDoc.close()
56       
57       if (etape.get_type_produit()==None): self.LENom.close()
58       elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None: self.LENom.setText(etape.sdnom) 
59       else : self.LENom.setText("")
60
61       maPolice= QFont("Times", 10,)
62       self.setFont(maPolice)
63       self.labelNomCommande.setText(tr(self.obj.nom))
64
65       self.commandesLayout.addStretch()
66       self.commandesLayout.focusInEvent=self.focusInEvent
67       self.scrollAreaCommandes.focusInEvent=self.focusInEvent
68
69      
70       if monEnvQT5 :
71          if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close()
72          else : self.bCatalogue.clicked.connect(self.afficheCatalogue)
73          if self.editor.code in ['Adao','MAP'] : 
74                self.bAvant.close()
75                self.bApres.close()
76          else : 
77                self.bAvant.clicked.connect(self.afficheAvant)
78                self.bApres.clicked.connect(self.afficheApres)
79          self.LENom.returnPressed.connect(self.nomChange)
80       else : 
81          if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close()
82          else : self.connect(self.bCatalogue,SIGNAL("clicked()"), self.afficheCatalogue)
83          if self.editor.code in ['Adao','MAP'] : 
84                self.bAvant.close()
85                self.bApres.close()
86          else : 
87                self.connect(self.bAvant,SIGNAL("clicked()"), self.afficheAvant)
88                self.connect(self.bApres,SIGNAL("clicked()"), self.afficheApres)
89          self.connect(self.LENom,SIGNAL("returnPressed()"),self.nomChange)
90    
91       self.racine=self.node.tree.racine
92       if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True)
93
94       self.setAcceptDrops(True)
95       self.etablitOrdre()
96
97       if self.editor.code == "CARMELCND" : 
98          self.RBPoubelle.close() # JDC Fige
99          return                  # Pas de MC Optionnels pour Carmel
100       from monWidgetOptionnel import MonWidgetOptionnel
101       #if hasattr(self.editor,'widgetOptionnel') : 
102       if self.editor.widgetOptionnel!= None : 
103         self.monOptionnel=self.editor.widgetOptionnel
104         self.editor.restoreSplitterSizes()
105       else :
106         self.monOptionnel=MonWidgetOptionnel(self)
107         self.editor.widgetOptionnel=self.monOptionnel
108         self.editor.splitter.addWidget(self.monOptionnel)
109         #self.editor.restoreSplitterSizes()
110       self.afficheOptionnel()
111       #print "fin init de widget Commande"
112       
113
114   def donnePremier(self):
115       #print "dans donnePremier"
116       QApplication.processEvents()
117       if self.listeAffichageWidget != [] :
118          self.listeAffichageWidget[0].setFocus(7)
119       QApplication.processEvents()
120       #print self.focusWidget()
121
122
123   def focusNextPrevChild(self, next):
124       # on s assure que ce n est pas un chgt de fenetre
125       #print "je passe dans focusNextPrevChild"
126       if self.editor.fenetreCentraleAffichee != self : return True
127       f=self.focusWidget()
128       if f not in self.listeAffichageWidget :
129          i=0
130          while not hasattr (f,'AAfficher') :
131            if f==None :i=-1; break
132            f=f.parentWidget()
133          if hasattr(f,'AAfficher') : f=f.AAfficher
134          if i != -1 : i=self.listeAffichageWidget.index(f)
135       else :i=self.listeAffichageWidget.index(f) 
136       if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe: 
137          try :
138            self.listeAffichageWidget[1].setFocus(7)
139            w=self.focusWidget()
140            self.inhibe=1
141            w.focusPreviousChild()
142            self.inhibe=0
143            return True
144          except :
145            print self.listeAffichageWidget
146            print "souci ds focusNextPrevChild"
147       if i==0 and next==False and not self.inhibe: 
148          if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
149             self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
150          self.listeAffichageWidget[-2].setFocus(7)
151          self.inhibe=1
152          w=self.focusWidget()
153          w.focusNextChild()
154          self.inhibe=0
155          return True
156       if i==0 and next==True and not self.inhibe:
157          self.listeAffichageWidget[0].setFocus(7)
158          self.inhibe=1
159          w=self.focusWidget()
160          w.focusNextChild()
161          self.inhibe=0
162          return True
163       if i>0 and next==False and not self.inhibe:
164          if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
165            self.listeAffichageWidget[i-1].setFocus(7)
166            return True
167       return QWidget.focusNextPrevChild(self, next)
168
169   def etablitOrdre(self):
170       i=0
171       while(i +1 < len(self.listeAffichageWidget)):
172          self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
173          i=i+1
174       # si on boucle on perd l'ordre
175  
176   def  afficheSuivant(self,f):
177       try :
178         i=self.listeAffichageWidget.index(f) 
179         next=i+1
180       except :
181         next=1
182       if (next==len(self.listeAffichageWidget) -1 ): next =0
183       #self.f=next
184       #QTimer.singleShot(1, self.rendVisible)
185       try :
186         self.listeAffichageWidget[next].setFocus(7)
187       except :
188         pass
189
190   def nomChange(self):
191       nom = str(self.LENom.text())
192       nom = string.strip(nom)
193       if nom == '' : return                  # si pas de nom, on ressort sans rien faire
194       test,mess = self.node.item.nomme_sd(nom)
195       self.editor.affiche_commentaire(mess)
196
197       #Notation scientifique
198       if test :
199         from politiquesValidation import Validation
200         validation=Validation(self.node,self.editor)
201         validation.AjoutDsDictReelEtape()
202
203   def afficheOptionnel(self):
204       # N a pas de parentQt. doit donc etre redefini
205       liste=self.ajouteMCOptionnelDesBlocs()
206       #print "dans afficheOptionnel", self.monOptionnel
207       # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
208       #if self.monOptionnel == None : return
209       self.monOptionnel.parentMC=self
210       self.monOptionnel.affiche(liste)
211
212   #def focusInEvent(self,event):
213       #print "je mets a jour dans focusInEvent de monWidget Commande "
214   #    if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel
215   #    self.afficheOptionnel()
216
217
218   def reaffiche(self,nodeAVoir=None):
219       self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
220       self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
221       self.inhibeExpand=True
222       self.node.affichePanneau()
223       #print "dans reaffiche de monWidgetCommande", self.avantH, self.avantV
224       QTimer.singleShot(1, self.recentre)
225       if nodeAVoir != None:
226         self.f=nodeAVoir.fenetre
227         if self.f==None : 
228              newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
229              self.f = newNode.fenetre 
230         print "dans reaffiche",self.f, nodeAVoir.item.nom
231         if self.f != None and self.f.isVisible() : return
232         if self.f != None : QTimer.singleShot(1, self.rendVisible)
233       self.inhibeExpand=False
234
235
236   def recentre(self):
237       QApplication.processEvents()
238       s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
239       s.horizontalScrollBar().setSliderPosition(self.avantH)
240       s.verticalScrollBar().setSliderPosition(self.avantV)
241
242   def rendVisibleNoeud(self,node):
243       self.f=node.fenetre
244       print "dans rendVisibleNoeud",self.f, node.item.nom
245       QTimer.singleShot(1, self.rendVisible)
246      
247   def rendVisible(self):
248       QApplication.processEvents()
249       self.f.setFocus(7)
250       self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
251
252   def afficheCatalogue(self):
253       if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
254       self.racine.affichePanneau()
255       if self.node : self.node.select()
256       else : self.racine.select()
257
258   def afficheApres(self):
259        self.node.selectApres()
260
261   def afficheAvant(self):
262        self.node.selectAvant()
263
264   def setValide(self):
265       if not(hasattr (self,'RBValide')) : return
266       icon = QIcon()
267       if self.node.item.object.isvalid() :
268          icon=QIcon(self.repIcon+"/ast-green-ball.png")
269       else :
270          icon=QIcon(self.repIcon+"/ast-red-ball.png")
271       if self.node.item.GetIconName() == "ast-yellow-square" :
272          icon=QIcon(self.repIcon+"/ast-yel-ball.png")
273       self.RBValide.setIcon(icon)
274
275