Salome HOME
86b304ecbfc424d059785f7f7830300f415154f6
[tools/eficas.git] / InterfaceQT4 / groupe.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 determine import monEnvQT5
23 if monEnvQT5:
24    from PyQt5.QtWidgets import QWidget
25 else :
26    from PyQt4.QtGui import *
27    from PyQt4.QtCore import *
28 from Extensions.i18n import tr
29
30 from Extensions.i18n import tr
31 from gereIcones import FacultatifOuOptionnel
32 import Accas 
33
34     
35 # Import des panels
36
37 class Groupe(QWidget,FacultatifOuOptionnel):
38   """
39   """
40   def __init__(self,node,editor,parentQt,definition,obj,niveau,commande=None):
41       QWidget.__init__(self,None)
42       self.node=node
43       self.node.fenetre=self
44       #print "groupe : ",self.node.item.nom," ",self.node.fenetre
45       #self.setFocusPolicy(Qt.StrongFocus)
46       self.setupUi(self)
47       self.editor=editor
48       self.obj=obj
49       self.niveau=niveau
50       self.definition=definition
51       self.parentQt=parentQt
52       self.maCommande=commande
53       self.listeFocus=[]
54       self.appliEficas=self.editor.appliEficas
55       self.repIcon=self.appliEficas.repIcon
56       self.jdc=self.node.item.get_jdc()
57       self.setIconePoubelle()
58       self.setIconesGenerales()
59       self.setRun()
60       self.setValide()
61       self.setReglesEtAide()
62       self.afficheMots()
63       self.listeMCAAjouter=[]
64       self.dictMCVenantDesBlocs={}
65       if hasattr(self,'RBDeplie') and not monEnvQT5 : self.connect(self.RBDeplie,SIGNAL("clicked()"), self.Deplie)
66       if hasattr(self,'RBPlie')  and not monEnvQT5: self.connect(self.RBPlie,SIGNAL("clicked()"), self.Plie)
67       if hasattr(self,'RBDeplie')  and monEnvQT5: self.RBDeplie.clicked.connect(self.Deplie)
68       if hasattr(self,'RBPlie')  and monEnvQT5: self.RBPlie.clicked.connect( self.Plie)
69       self.setAcceptDrops(True)
70       #self.donneFocus()
71      
72   def donneFocus(self):
73       for fenetre in self.listeFocus:
74           if fenetre==None : return
75           if fenetre.node.item.isvalid() == 0 :
76              fenetre.prendLeFocus=1
77              fenetre.hide()
78              fenetre.show()
79       
80
81   def afficheMots(self):
82       #print "ds afficheMots ",self.node.item.nom
83       for node in self.node.children:
84            #if node.item.nom == "Background" :print "afficheMots ",node," " ,node.item.nom, " ",node.plie ," ", node.appartientAUnNoeudPlie,node.getPanelGroupe
85            #if node.item.nom == "BackgroundError" :print "afficheMots ",node," " ,node.item.nom, " ",node.plie ," ", node.appartientAUnNoeudPlie,node.getPanelGroupe
86            # non return mais  continue car il faut tenir compte des blocs
87            if node.appartientAUnNoeudPlie==True : continue
88            #print "je suis apres le if pour ",node.item.nom
89            widget=node.getPanelGroupe(self,self.maCommande)
90            #print "widget pour ", node.item.nom, widget
91            self.listeFocus.append(node.fenetre)
92       #print "fin pour " , self.node.item.nom
93
94        
95   def calculOptionnel(self):
96         self.liste_mc=[]
97         genea =self.obj.get_genealogie()
98         # Attention : les mots clefs listes (+sieurs fact )
99         # n ont pas toutes ces methodes
100         try :
101            self.liste_mc=self.obj.get_liste_mc_ordonnee(genea,self.jdc.cata_ordonne_dico)
102         except :
103            return
104         
105   def afficheOptionnel(self):
106         liste=self.ajouteMCOptionnelDesBlocs()
107         #chercheOptionnel=self.parentQt
108         # Boucle necessaire pour les regroupements Adao
109         #while not( hasattr(chercheOptionnel,'monOptionnel')):
110         #    chercheOptionnel=chercheOptionnel.parentQt
111         #self.monOptionnel=chercheOptionnel.monOptionnel
112         self.monOptionnel=self.editor.widgetOptionnel
113         self.monOptionnel.parentMC=self
114         self.monOptionnel.affiche(liste)
115            
116
117   def ajouteMCOptionnelDesBlocs(self):
118       #print "Je passe dans ajouteMCOptionnelDesBlocs pour", self.node.item.nom
119       self.dictMCVenantDesBlocs={}
120       i=0
121       self.calculOptionnel()
122       liste=self.liste_mc
123       for MC in self.liste_mc : self.dictMCVenantDesBlocs[MC]=self
124       while i < self.commandesLayout.count():
125           from monWidgetBloc import MonWidgetBloc
126           widget=self.commandesLayout.itemAt(i).widget()
127           i=i+1
128           if not(isinstance(widget,MonWidgetBloc)) : continue
129           widget.calculOptionnel()
130           listeW=widget.ajouteMCOptionnelDesBlocs() 
131           for MC in widget.dictMCVenantDesBlocs.keys():
132               if MC in self.dictMCVenantDesBlocs.keys(): print "Pb Sur les MC" 
133               else : self.dictMCVenantDesBlocs[MC]=widget.dictMCVenantDesBlocs[MC]
134           liste=liste+listeW
135       return liste
136
137
138   def reaffiche(self,nodeAVoir=None):
139       #print "dans reaffiche de groupe.py", nodeAVoir
140       self.parentQt.reaffiche(nodeAVoir)
141
142   def recalculeListeMC(self,listeMC):
143       #print "pas si peu utile"
144       #on ajoute et on enleve
145       listeNode=[]
146       for name in listeMC :
147           nodeAEnlever=self.node.append_child(name)
148           if nodeAEnlever.item.isMCList(): 
149              nodeAEnlever=nodeAEnlever.children[-1]
150           listeNode.append(nodeAEnlever)
151       self.afficheOptionnel()
152       self.monOptionnel.affiche(self.liste_mc)
153       if len(listeNode) == 0 : return
154       if len(listeNode) == 1 : 
155          listeNode[0].delete()
156          self.editor.affiche_infos("")
157          return
158       for noeud in listeNode:
159           noeud.treeParent.item.suppitem(noeud.item)
160       noeud.treeParent.build_children()
161       self.editor.affiche_infos("")
162
163   def ajoutMC(self,texteListeNom):
164       listeNom=texteListeNom.split("+")[1:]
165       firstNode=None
166       for nom in listeNom:
167         if nom not in self.dictMCVenantDesBlocs.keys():
168            #print "bizarre, bizarre"
169            self.editor.init_modif()
170            nouveau=self.node.append_child(nom)
171         else :
172            self.editor.init_modif()
173            widget=self.dictMCVenantDesBlocs[nom]
174            nouveau=widget.node.append_child(nom)
175         if firstNode==None : firstNode=nouveau 
176         if nouveau == None or nouveau == 0  : 
177            self.editor.affiche_infos(str('insertion impossible a cet endroit pour '+nom),Qt.red)
178       self.reaffiche(firstNode)
179       if firstNode!=None and firstNode.item!=None :
180         firstNode.select()
181
182
183   def Plie(self):
184       self.node.setPlie()
185       self.reaffiche(self.node) 
186
187   def Deplie(self):
188       self.node.setDeplie()
189       self.reaffiche(self.node) 
190
191   def traiteClicSurLabel(self,texte):
192       if self.editor.code != "CARMELCND" : self.afficheOptionnel()
193