Salome HOME
bug
[tools/eficas.git] / InterfaceQT4 / monWidgetCommande.py
1 # Copyright (C) 2007-2017   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       resize=0
58       if node.item.getFr() != "" : 
59          self.labelDoc.setText(node.item.getFr())
60          resize=1
61       else : self.labelDoc.close()
62       
63       if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close()
64       elif (hasattr(etape.definition,'sd_prod') and type(etape.definition.sd_prod)== types.FunctionType):self.LENom.close()
65       elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None: 
66            self.LENom.setText(etape.sdnom)
67            resize=resize*1
68       else : 
69            self.LENom.setText("")
70            resize=resize*1
71       if resize :
72          nouvelleSize=self.frameAffichage.height()+60
73          self.frameAffichage.setMinimumHeight(nouvelleSize)
74          self.frameAffichage.resize(self.frameAffichage.width(),nouvelleSize)
75       
76
77
78       maPolice= QFont("Times", 10,)
79       self.setFont(maPolice)
80       self.labelNomCommande.setText(tr(self.obj.nom))
81
82
83       if self.editor.maConfiguration.closeAutreCommande == True  : self.closeAutreCommande()
84       else :
85         try :
86            self.bCatalogue.clicked.connect(self.afficheCatalogue)
87            self.bAvant.clicked.connect(self.afficheAvant)
88            self.bApres.clicked.connect(self.afficheApres)
89         except :
90            pass
91        
92       if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange)
93    
94       if self.editor.code in ['Adao','ADAO'] and self.editor.maConfiguration.closeFrameRechercheCommande==True  : 
95                       self.frameAffichage.close()
96       if self.editor.maConfiguration.closeFrameRechercheCommande==True  : 
97          self.closeAutreCommande()
98
99       if self.editor.code in ['CARMELCND',] : self.closeAutreCommande()
100       self.racine=self.node.tree.racine
101       if self.node.item.getIconName() == "ast-red-square" : self.LENom.setDisabled(True)
102
103       self.setAcceptDrops(True)
104       self.etablitOrdre()
105
106       if self.editor.code == "CARMELCND" : 
107          self.RBPoubelle.close() # JDC Fige
108          return                  # Pas de MC Optionnels pour Carmel
109
110       from .monWidgetOptionnel import MonWidgetOptionnel
111       if self.editor.widgetOptionnel!= None : 
112         self.monOptionnel=self.editor.widgetOptionnel
113       else :
114         self.editor.inhibeSplitter=1
115         self.monOptionnel=MonWidgetOptionnel(self.editor)
116         self.editor.widgetOptionnel=self.monOptionnel
117         self.editor.splitter.addWidget(self.monOptionnel)
118         self.editor.ajoutOptionnel()
119         self.editor.inhibeSplitter=0
120         self.monOptionnel=self.editor.widgetOptionnel
121       self.afficheOptionnel()
122       spacerItem = QSpacerItem(21, 500, QSizePolicy.Expanding, QSizePolicy.Expanding)
123       #spacerItem = QSpacerItem(21, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)
124       #self.commandesLayout.addItem(spacerItem)
125       self.verticalLayoutCommande.addItem(spacerItem)
126
127       #self.editor.restoreSplitterSizes()
128
129       #print "fin init de widget Commande"
130       
131
132   def closeAutreCommande(self):
133       self.bCatalogue.close()
134       self.bAvant.close()
135       self.bApres.close()
136
137   def donnePremier(self):
138       #print "dans donnePremier"
139       QApplication.processEvents()
140       if self.listeAffichageWidget != [] :
141          self.listeAffichageWidget[0].setFocus(7)
142       QApplication.processEvents()
143       #print self.focusWidget()
144
145
146   def focusNextPrevChild(self, next):
147       # on s assure que ce n est pas un chgt de fenetre
148       #print "je passe dans focusNextPrevChild"
149       if self.editor.fenetreCentraleAffichee != self : return True
150       f=self.focusWidget()
151       if f not in self.listeAffichageWidget :
152          i=0
153          while not hasattr (f,'AAfficher') :
154            if f==None :i=-1; break
155            f=f.parentWidget()
156          if hasattr(f,'AAfficher') : f=f.AAfficher
157          if i != -1 : i=self.listeAffichageWidget.index(f)
158       else :i=self.listeAffichageWidget.index(f) 
159       if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe: 
160          try :
161            self.listeAffichageWidget[1].setFocus(7)
162            w=self.focusWidget()
163            self.inhibe=1
164            w.focusPreviousChild()
165            self.inhibe=0
166            return True
167          except :
168            pass
169            #print self.listeAffichageWidget
170            #print "souci ds focusNextPrevChild"
171       if i==0 and next==False and not self.inhibe: 
172          if hasattr(self.editor.fenetreCentraleAffichee,'scrollArea'):
173             self.editor.fenetreCentraleAffichee.scrollArea.ensureWidgetVisible(self.listeAffichageWidget[-1])
174          self.listeAffichageWidget[-2].setFocus(7)
175          self.inhibe=1
176          w=self.focusWidget()
177          w.focusNextChild()
178          self.inhibe=0
179          return True
180       if i==0 and next==True and not self.inhibe:
181          self.listeAffichageWidget[0].setFocus(7)
182          self.inhibe=1
183          w=self.focusWidget()
184          w.focusNextChild()
185          self.inhibe=0
186          return True
187       if i>0 and next==False and not self.inhibe:
188          if isinstance(self.listeAffichageWidget[i-1],QRadioButton):
189            self.listeAffichageWidget[i-1].setFocus(7)
190            return True
191       return QWidget.focusNextPrevChild(self, next)
192
193   def etablitOrdre(self):
194       i=0
195       while(i +1 < len(self.listeAffichageWidget)):
196          self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
197          i=i+1
198       # si on boucle on perd l'ordre
199  
200   def  afficheNieme(self,n):
201       #print ('ds afficheNieme')
202       self.listeAffichageWidget[n].setFocus(7)
203
204   def  afficheSuivant(self,f):
205       #print ('ds afficheSuivant')
206       try :
207         i=self.listeAffichageWidget.index(f) 
208         next=i+1
209       except :
210         next=1
211       if (next==len(self.listeAffichageWidget) ): next =0
212       #self.f=next
213       #QTimer.singleShot(1, self.rendVisible)
214       try :
215         self.listeAffichageWidget[next].setFocus(7)
216       except :
217         pass
218
219   def nomChange(self):
220       nom = str(self.LENom.text())
221       nom = nom.strip()
222       if nom == '' : return                  # si pas de nom, on ressort sans rien faire
223       test,mess = self.node.item.nommeSd(nom)
224       self.editor.afficheCommentaire(mess)
225
226       #Notation scientifique
227       if test :
228         from .politiquesValidation import Validation
229         validation=Validation(self.node,self.editor)
230         validation.ajoutDsDictReelEtape()
231
232   def afficheOptionnel(self):
233       # N a pas de parentQt. doit donc etre redefini
234       liste,liste_rouge=self.ajouteMCOptionnelDesBlocs()
235       #print "dans afficheOptionnel", self.monOptionnel
236       # dans le cas ou l insertion n a pas eu leiu (souci d ordre par exemple)
237       #if self.monOptionnel == None : return
238       self.monOptionnel.parentCommande=self
239       self.monOptionnel.titre(self.obj.nom)
240       self.monGroupe=self.monOptionnel.afficheOptionnel(liste,liste_rouge,self)
241       
242
243   def focusInEvent(self,event):
244       #print "je mets a jour dans focusInEvent de monWidget Commande "
245       if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel
246       self.afficheOptionnel()
247
248
249   def reaffiche(self,nodeAVoir=None):
250       # Attention delicat. les appels de fonctions ne semblent pas pouvoir etre supprimes!
251       self.avantH=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.horizontalScrollBar().sliderPosition()
252       self.avantV=self.editor.fenetreCentraleAffichee.scrollAreaCommandes.verticalScrollBar().sliderPosition()
253       self.inhibeExpand=True
254       self.node.affichePanneau()
255       #QTimer.singleShot(1, self.recentre)
256       if nodeAVoir != None and nodeAVoir!=0:
257         self.f=nodeAVoir.fenetre
258         if self.f==None : 
259              newNode=nodeAVoir.treeParent.chercheNoeudCorrespondant(nodeAVoir.item.object)
260              self.f = newNode.fenetre 
261         if self.f != None and self.f.isVisible() : self.inhibeExpand=False; return
262         if self.f != None : self.rendVisible()
263         else : self.recentre()
264       else : self.recentre()
265       self.inhibeExpand=False
266
267   def reafficheSeulement(self,nodeAReafficher,index):
268       #print ('ds reafficheSeulement', nodeAReafficher)
269       parentNodeAReafficher=nodeAReafficher.parentQt
270       index=parentNodeAReafficher.commandesLayout.indexOf(nodeAReafficher)
271       oldFenetre=nodeAReafficher.node.fenetre
272       newWidget=nodeAReafficher.node.getPanelGroupe(parentNodeAReafficher,self,index)
273       nodeAReafficher.node.fenetre=newWidget
274       oldFenetre.setParent(None)
275       oldFenetre.close()
276       oldFenetre.deleteLater()
277       #print ("fin pour " , self.node.item.nom)
278
279
280   def recentre(self):
281       QApplication.processEvents()
282       s=self.editor.fenetreCentraleAffichee.scrollAreaCommandes
283       s.horizontalScrollBar().setSliderPosition(self.avantH)
284       s.verticalScrollBar().setSliderPosition(self.avantV)
285
286   def rendVisibleNoeud(self,node):
287       self.f=node.fenetre
288       #print "dans rendVisibleNoeud",self.f
289       QTimer.singleShot(1, self.rendVisible)
290      
291   def rendVisible(self):
292       #print "dans rendVisible",self.f
293       QApplication.processEvents()
294       self.f.setFocus(7)
295       self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f)
296
297   def afficheCatalogue(self):
298       if self.editor.widgetOptionnel != None : self.monOptionnel.hide()
299       self.racine.affichePanneau()
300       if self.node : self.node.select()
301       else : self.racine.select()
302
303   def afficheApres(self):
304        self.node.selectApres()
305
306   def afficheAvant(self):
307        self.node.selectAvant()
308
309   def setValide(self):
310       if not(hasattr (self,'RBValide')) : return
311       icon = QIcon()
312       if self.node.item.object.isValid() : icon=QIcon(self.repIcon+"/ast-green-ball.png")
313       else : icon=QIcon(self.repIcon+"/ast-red-ball.png")
314       nomIcone = self.node.item.getIconName()
315       if nomIcone == "ast-yellow-square" : icon=QIcon(self.repIcon+"/ast-yel-ball.png")
316       if nomIcone == "ast-red-square" : self.LENom.setDisabled(True)
317
318       self.LENom.setDisabled(False)
319       self.RBValide.setIcon(icon)
320
321