Salome HOME
Add COPYING license file
[tools/eficas.git] / InterfaceQT4 / monChoixCommande.py
1 # Copyright (C) 2007-2021   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 __future__ import absolute_import
23 try :
24     from builtins import str
25 except : pass
26
27 from desChoixCommandes import Ui_ChoixCommandes
28 from PyQt5.QtWidgets import QWidget, QAction ,QButtonGroup, QRadioButton, QLabel , QPushButton, QSpacerItem, QSizePolicy, QGridLayout
29 from PyQt5.QtGui  import QIcon, QPixmap
30 from PyQt5.QtCore import QSize, QRect
31
32 from Extensions.i18n import tr
33 import os
34
35
36 # Import des panels
37
38 class MonChoixCommande(Ui_ChoixCommandes,QWidget):
39     """
40     """
41     def __init__(self,node, jdc_item, editor):
42         QWidget.__init__(self,parent=None)
43         self.setupUi(self)
44
45         self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
46         iconeFile=os.path.join(self.repIcon,'lettreRblanc30.png')
47         icon = QIcon(iconeFile)
48         self.RBRegle.setIcon(icon)
49         self.RBRegle.setIconSize(QSize(21, 31))
50
51         self.item = jdc_item
52         self.node = node
53         self.editor = editor
54         self.simpleClic=self.editor.maConfiguration.simpleClic
55         self.jdc  = self.item.object.getJdcRoot()
56         debutTitre=self.editor.titre
57         self.listeWidget=[]
58         self.dicoCmd={}
59         if self.editor.fichier != None :
60             nouveauTitre=debutTitre+" "+os.path.basename(self.editor.fichier)
61         else :
62             nouveauTitre=debutTitre
63         self.editor.appliEficas.setWindowTitle(nouveauTitre)
64
65
66         self.RBalpha.clicked.connect(self.afficheAlpha)
67         self.RBGroupe.clicked.connect(self.afficheGroupe)
68         self.RBOrdre.clicked.connect(self.afficheOrdre)
69         self.RBClear.clicked.connect(self.clearFiltre)
70         self.RBCasse.toggled.connect(self.ajouteRadioButtons)
71         self.LEFiltre.returnPressed.connect(self.ajouteRadioButtons)
72         self.LEFiltre.textChanged.connect(self.ajouteRadioButtons)
73
74         if self.node.tree.item.getRegles() == () :
75             self.RBRegle.close()
76             self.labelRegle.close()
77         else :
78             self.RBRegle.clicked.connect(self.afficheRegle)
79
80         if self.editor.readercata.Ordre_Des_Commandes == None : self.RBOrdre.close()
81
82
83         #self.editor.labelCommentaire.setText("")
84         if self.editor.widgetOptionnel!= None :
85             self.editor.fermeOptionnel()
86             self.editor.widgetOptionnel=None
87         self.name=None
88
89         self.boolAlpha=0
90         self.boolGroupe=0
91         self.boolOrdre=0
92         if self.editor.maConfiguration.affiche=="alpha"  :
93             self.boolAlpha==1;
94             self.RBalpha.setChecked(True);
95             self.afficheAlpha()
96         elif self.editor.maConfiguration.affiche=="groupe" :
97             self.boolGroupe==1;
98             self.RBGroupe.setChecked(True);
99             self.afficheGroupe()
100         elif self.editor.maConfiguration.affiche=="ordre"  :
101             self.boolOrdre==1;
102             self.RBOrdre.setChecked(True);
103             self.afficheOrdre()
104         if self.editor.maConfiguration.closeFrameRechercheCommandeSurPageDesCommandes == True : self.frameAffichage.close()
105
106         if self.editor.widgetTree != None : self.editor.restoreSplitterSizes(2)
107         else: self.editor.restoreSplitterSizes(3)
108
109     def afficheRegle(self):
110         self.node.tree.appellebuildLBRegles()
111
112     def afficheAlpha(self):
113         self.boolAlpha=1
114         self.boolGroupe=0
115         self.boolOrdre=0
116         self.ajouteRadioButtons()
117
118     def afficheGroupe(self):
119         self.boolAlpha=0
120         self.boolGroupe=1
121         self.boolOrdre=0
122         self.ajouteRadioButtons()
123
124     def afficheOrdre(self):
125         self.boolAlpha=0
126         self.boolGroupe=0
127         self.boolOrdre=1
128         self.ajouteRadioButtons()
129
130     def insereNoeudApresClick(self,event):
131         #print self.editor.Classement_Commandes_Ds_Arbre
132         #if self.editor.Classement_Commandes_Ds_Arbre!= () : self.chercheOu()
133         #print ('dans insereNoeudApresClick')
134         nodeCourrant=self.node.tree.currentItem()
135         if nodeCourrant==None: nodeCourrant=self.node.tree.racine
136         if self.name != None :
137             plier=self.editor.maConfiguration.afficheCommandesPliees
138             if nodeCourrant==self.node : nouveau=self.node.appendChild(self.name,'first',plier)
139             else : nouveau=nodeCourrant.appendBrother(self.name,plier=plier)
140         else :
141             nouveau = 0
142         if nouveau == 0 : return # on n a pas insere le noeud
143         nouveau.setDeplie()
144         #if self.editor.afficheApresInsert==True : nouveau.plieToutEtReaffiche()
145         if self.editor.afficheApresInsert == True :
146             #if self.editor.affichePlie==True:  nouveau.plieToutEtReaffiche()
147             if self.editor.maConfiguration.afficheCommandesPliees ==True:  nouveau.plieToutEtReaffiche()
148             else : nouveau.deplieToutEtReaffiche()
149             nouveau.fenetre.donnePremier()
150             #nouveau.deplieToutEtReaffiche()
151         else :
152             self.node.setSelected(False)
153             nouveau.setSelected(True)
154             self.node.tree.setCurrentItem(nouveau)
155         if event != None : event.accept()
156
157
158
159     def creeListeCommande(self,filtre):
160         listeGroupes,dictGroupes=self.jdc.getGroups()
161         sensibleALaCasse=self.RBCasse.isChecked()
162         if "CACHE" in dictGroupes: aExclure=list(dictGroupes["CACHE"])
163         else: aExclure=[]
164         listeACreer=[]
165         listeEtapesDejaPresentes=[]
166         if self.editor.maConfiguration.rendVisiblesLesCaches :
167             for e in self.jdc.etapes:
168                 listeEtapesDejaPresentes.append(e.nom)
169             for c in aExclure :
170                 if c not in listeEtapesDejaPresentes : aExclure.remove(c)
171         #for e in self.jdc.etapes:
172         #    print (e.nom)
173         #    print (e.definition.repetable)
174         #    if e.definition.repetable == 'n' : aExclure.append(e.nom)
175         #print (aExclure)
176         for l in self.jdc.getListeCmd():
177             if l not in aExclure :
178                 if sensibleALaCasse and (filtre != None and not filtre in l) : continue
179                 if (not sensibleALaCasse) and filtre != None and (not filtre in l) and (not filtre.upper() in l) : continue
180                 listeACreer.append(l)
181         return listeACreer
182
183     def ajouteRadioButtons(self):
184         if self.editor.maConfiguration.nombreDeBoutonParLigne != 0 :
185             self.ajoutePushButtons()
186             return
187         #print 'ds ajouteRadioButtons'
188         filtre=str(self.LEFiltre.text())
189         if filtre==str("") : filtre=None
190         if hasattr(self,'buttonGroup') :
191             for b in self.buttonGroup.buttons():
192                 self.buttonGroup.removeButton(b)
193                 b.setParent(None)
194                 b.close()
195         else :
196             self.buttonGroup = QButtonGroup()
197         for w in self.listeWidget :
198             w.setParent(None)
199             w.close()
200         self.listeWidget=[]
201         if self.boolAlpha==1 :
202             liste=self.creeListeCommande(filtre)
203             for cmd in liste :
204                 self.dicoCmd[tr(cmd)]=cmd
205                 rbcmd=(QRadioButton(tr(cmd)))
206                 self.buttonGroup.addButton(rbcmd)
207                 self.commandesLayout.addWidget(rbcmd)
208                 #if self.simpleClic :  rbcmd.mouseReleaseEvent=self.insereNoeudApresClick
209                 #else : rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
210                 #self.buttonGroup.buttonClicked.connect(self.rbClique)
211                 if not(self.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
212             if self.simpleClic :
213                 self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
214             else :
215                 self.buttonGroup.buttonClicked.connect(self.rbClique)
216         elif  self.boolGroupe==1 :
217             listeGroupes,dictGroupes=self.jdc.getGroups()
218             for grp in listeGroupes:
219                 if grp == "CACHE" : continue
220                 label=QLabel(self)
221                 text=tr('<html><head/><body><p><span style=\" font-weight:600;\">Groupe : '+tr(grp)+'</span></p></body></html>')
222                 label.setText(text)
223                 self.listeWidget.append(label)
224                 aAjouter=1
225                 sensibleALaCasse=self.RBCasse.isChecked()
226                 for cmd in  dictGroupes[grp]:
227                     if sensibleALaCasse and (filtre != None and not filtre in cmd) : continue
228                     if (not sensibleALaCasse) and filtre != None and (not filtre in cmd) and (not filtre.upper() in cmd) : continue
229                     if aAjouter == 1 :
230                         self.commandesLayout.addWidget(label)
231                         aAjouter=0
232                     self.dicoCmd[tr(cmd)]=cmd
233                     rbcmd=(QRadioButton(tr(cmd)))
234                     self.buttonGroup.addButton(rbcmd)
235                     self.commandesLayout.addWidget(rbcmd)
236                     if not(self.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
237                 if self.simpleClic :
238                     self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
239                 else :
240                     self.buttonGroup.buttonClicked.connect(self.rbClique)
241                 label2=QLabel(self)
242                 label2.setText(" ")
243                 self.listeWidget.append(label2)
244                 self.commandesLayout.addWidget(label2)
245         elif  self.boolOrdre==1 :
246             listeFiltre=self.creeListeCommande(filtre)
247             liste=[]
248             if self.editor.readercata.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
249             else : Ordre_Des_Commandes=self.editor.readercata.Ordre_Des_Commandes
250             for cmd in Ordre_Des_Commandes :
251                 if cmd in listeFiltre :
252                     liste.append(cmd)
253             for cmd in liste :
254                 self.dicoCmd[tr(cmd)]=cmd
255                 rbcmd=(QRadioButton(tr(cmd)))
256                 self.buttonGroup.addButton(rbcmd)
257                 self.commandesLayout.addWidget(rbcmd)
258                 if not(self.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
259             if self.simpleClic :
260                 self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
261             else :
262                 self.buttonGroup.buttonClicked.connect(self.rbClique)
263
264
265
266     def ajoutePushButtons(self):
267         if hasattr(self,'buttonGroup') :
268             for b in self.buttonGroup.buttons():
269                 self.buttonGroup.removeButton(b)
270                 b.setParent(None)
271                 b.close()
272         else :
273             self.buttonGroup = QButtonGroup()
274             self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
275         for w in self.listeWidget :
276             w.setParent(None)
277             w.close()
278         self.listeWidget=[]
279
280         if not hasattr(self,'maGrilleBouton') :
281             #self.commandesLayout.close()
282             self.maGrilleBouton=QGridLayout()
283             self.maGrilleBouton.setSpacing(20)
284             self.verticalLayout.addLayout(self.maGrilleBouton)
285         col=-1
286         ligne = 0
287
288         if self.boolAlpha==1 :
289             liste=self.creeListeCommande(None)
290         elif  self.boolOrdre:
291             liste=self.creeListeCommande(None)
292             listeFiltre=self.creeListeCommande(None)
293             liste=[]
294             if self.editor.readercata.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
295             else : Ordre_Des_Commandes=self.editor.readercata.Ordre_Des_Commandes
296             for cmd in Ordre_Des_Commandes :
297                 if cmd in listeFiltre :
298                     liste.append(cmd)
299         elif self.boolGroupe : 
300              # On considere que cela n a pas de sens de filtrer sur les groupes ou ?
301              return
302         for cmd in liste :
303             col=col+1
304             if col == self.editor.maConfiguration.nombreDeBoutonParLigne :
305                 col=0
306                 ligne=ligne+1
307             self.dicoCmd[tr(cmd)]=cmd
308             rbcmd=QPushButton(tr(cmd))
309             rbcmd.setGeometry(QRect(40, 20, 211, 71))
310             rbcmd.setMaximumSize(QSize(250, 81))
311             rbcmd.setStyleSheet("background-color : rgb(66, 165, 238);\n"
312 "/*border-style : outset;*/\n"
313 "border-radius : 20px;\n"
314 "border-width : 30 px;\n"
315 "border-color : beige;\n"
316 "text-align : center")
317             #print ('self.editor.maConfiguration.dicoImages', self.editor.maConfiguration.dicoImages)
318             if cmd in self.editor.maConfiguration.dicoImages :
319                 fichier=self.editor.maConfiguration.dicoImages[cmd]
320                 icon = QIcon()
321                 icon.addPixmap(QPixmap(fichier), QIcon.Normal, QIcon.Off)
322                 rbcmd.setIcon(icon)
323                 rbcmd.setIconSize(QSize(48, 48))
324
325             self.buttonGroup.addButton(rbcmd)
326             self.maGrilleBouton.addWidget(rbcmd,ligne,col)
327
328     def clearFiltre(self):
329         self.LEFiltre.setText("")
330         self.ajouteRadioButtons()
331
332     def rbCliqueEtInsere(self,id):
333         self.rbClique(id)
334         self.insereNoeudApresClick(None)
335
336     def rbClique(self,id):
337
338         try :
339             self.name=self.dicoCmd[id.text()]
340         except :
341             try :
342                 self.name=self.dicoCmd[str(id.text())]
343             except :
344                 print ('pb d accent : contacter la maintenance')
345
346         definitionEtape=getattr(self.jdc.cata,self.name)
347         #commentaire=getattr(definitionEtape,self.jdc.lang)
348         try :
349             commentaire=getattr(definitionEtape,self.jdc.lang)
350         except :
351             try :
352                 commentaire=getattr(definitionEtape,"ang")
353             except :
354                 commentaire=""
355         self.editor.afficheCommentaire(commentaire)
356
357
358
359     def setValide(self):
360         #PNPN a priori pas d icone mais peut-etre a faire
361         pass