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