]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/qtCommun.py
Salome HOME
gitignore V1
[tools/eficas.git] / InterfaceQT4 / qtCommun.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Modules Python
21 import string,types,os
22 import traceback
23
24 from PyQt4 import *
25 from PyQt4.QtGui import *
26 from PyQt4.QtCore import *
27 from Extensions.i18n import tr
28
29 # Import des panels
30
31 # ---------- #
32 class QTPanel:
33 # ---------- #
34   """
35   Classe contenant les methodes Qt communes a tous les panneaux droits
36   Tous les panneaux Mon...Panel heritent de cette classe
37   Gere plus precisement :
38      - l affichage de la doc
39      - le bouton Suppression (BSupPressed)
40      - la mutualisation de l affichage des regles
41   """
42   def __init__(self,node, parent = None):
43         self.editor    = parent
44         self.node      = node
45         if hasattr(self,'TWChoix'):
46            self.connect(self.TWChoix, SIGNAL("currentChanged(QWidget *)"), self.GestionBALpha)
47
48   def keyReleaseEvent(self,event):
49         if event.matches(QKeySequence.Copy): self.editor.appliEficas.editCopy() 
50         if event.matches(QKeySequence.Cut): self.editor.appliEficas.editCut() 
51         if event.matches(QKeySequence.Paste): self.editor.appliEficas.editPaste() 
52
53
54   def GestionBALpha(self,fenetre):
55         if self.TWChoix.currentIndex()!=0:
56            if hasattr(self,'BAlpha'): #pour include materiau
57               self.BAlpha.hide()
58         else :
59            if hasattr(self,'BAlpha'): 
60               self.BAlpha.setVisible(True)
61               self.BuildLBMCPermis()
62
63   def BOkPressed(self):
64     if hasattr(self, "Commande") and self.TWChoix.currentWidget() is self.Commande:
65       self.DefCmd()
66     elif hasattr(self, "Concept") and self.TWChoix.currentWidget() is self.Concept:
67       self.LENomConceptReturnPressed()
68     elif hasattr(self, "MotClef") and self.TWChoix.currentWidget() is self.MotClef:
69       if self.LBMCPermis.currentItem() == None : return
70       self.DefMC(self.LBMCPermis.currentItem())
71     elif hasattr(self, "Formule") and self.TWChoix.currentWidget() is self.Formule:
72       self.BOkPressedFormule()
73     elif hasattr(self, "Valeur_Parametre") and self.TWChoix.currentWidget() is self.Valeur_Parametre:
74       self.BOkParamPressed()
75     elif hasattr(self, "maPageOk") and self.TWChoix.currentWidget() is self.maPageOk:
76       self.BOkIncPressed()
77     else:
78       raise Exception("Unknown selected tab %s" % self.TWChoix.tabText(self.TWChoix.currentIndex()))
79
80   def BParametresPressed(self):
81         liste=self.node.item.get_liste_param_possible()
82         from monListeParamPanel import MonListeParamPanel
83         MonListeParamPanel(liste=liste,parent=self).show()
84        
85   def AppelleBuildLBRegles(self):
86         listeRegles     = self.node.item.get_regles()
87         listeNomsEtapes = self.node.item.get_mc_presents()
88         self.BuildLBRegles(listeRegles,listeNomsEtapes)
89
90
91   def BuildLBRegles(self,listeRegles,listeNomsEtapes):
92         self.LBRegles.clear()
93         if len(listeRegles) > 0:
94            for regle in listeRegles :
95               texteRegle=regle.gettext()
96               texteMauvais,test = regle.verif(listeNomsEtapes)
97               for ligne in texteRegle.split("\n") :
98                  if ligne == "" :
99                     self.LBRegles.addItem(ligne)
100                     continue
101                  if ligne[0]=="\t" :
102                     ligne="     "+ligne[1:]
103                  if test :
104                     self.LBRegles.addItem(ligne)
105                  else :
106                     
107                     monItem=QListWidgetItem(ligne)
108                     monItem.setForeground(Qt.red)
109                     self.LBRegles.addItem(monItem)
110
111
112 # ----------------------- #
113 class QTPanelTBW1(QTPanel):
114 # ----------------------- #
115   """
116   Classe contenant les methodes necessaires a l onglet "Ajouter Mot-Clef"  
117   herite de QTPanel  # Attention n appelle pas le __init__
118   Gere plus precisement :
119   """
120   def __init__(self,node, parent = None):
121         self.editor    = parent
122         self.node      = node
123         if not(hasattr(self.node,'alpha')): self.node.alpha  = 0
124         self.BuildLBMCPermis()
125         self.AppelleBuildLBRegles()
126         if hasattr(self,'BAlpha'):
127            self.connect(self.BAlpha,SIGNAL("clicked()"),self.BAlphaPressed)
128
129   def BAlphaPressed (self):
130         if self.node.alpha == 0 :
131            self.node.alpha=1
132            self.BAlpha.setText(tr("Tri Cata"))
133         else :
134            self.node.alpha=0
135            self.BAlpha.setText(tr("Tri Alpha"))
136         self.BuildLBMCPermis()
137
138            
139   def BuildLBMCPermis(self):
140         self.LBMCPermis.clear()
141         QObject.connect(self.LBMCPermis,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefMC)
142         jdc = self.node.item.get_jdc()
143         genea =self.node.item.get_genealogie()
144         liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
145         if ((len(liste_mc) < 10) and (hasattr(self,'BAlpha'))):
146            self.BAlpha.hide()
147         if self.node.alpha == 1 : liste_mc.sort()
148         for aMc in liste_mc: self.LBMCPermis.addItem( aMc)
149         if len(liste_mc) !=0: self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
150
151
152   def DefMC(self,item):
153         """ On ajoute un mot-cle à  la commande : subnode """
154         name=str(item.text())
155         self.editor.init_modif()
156         self.node.append_child(name)
157
158 # ---------------------------- #
159 class QTPanelTBW2(QTPanel):
160 # ---------------------------- #
161   """
162   Classe contenant les methodes necessaires a l onglet "Nouvelle Commande"  
163   herite de QTPanel  # Attention n appelle pas le __init__
164   Gere plus precisement :
165   """
166
167   def __init__(self,node, parent = None, racine = 0):
168         self.editor    = parent
169         self.node      = node
170         self.BuildLBNouvCommande()
171         self.LEFiltre.setFocus()
172         self.NbRecherches = 0
173         if racine == 1 :
174            self.AppelleBuildLBRegles()
175            self.LEFiltre.setFocus()
176         else :
177            self.connect(self.TWChoix, SIGNAL("currentChanged(QWidget *)"), self.handleCurrentChanged)
178             
179
180
181   def handleCurrentChanged(self):
182         try :
183           label=self.TWChoix.tabText(self.TWChoix.currentIndex())
184           if label==tr("Nouvelle Commande"):
185             self.LEFiltre.setFocus()
186           if label==tr("Nommer Concept"):
187            self.LENomConcept.setFocus()
188           if label==tr("Definition Formule"):
189            self.LENomFormule.setFocus()
190           if label==tr("Valeur Parametre"):
191            self.lineEditNom.setFocus()
192           if label==tr("Fichier Include"):
193            self.LENomFichier.setFocus()
194           if label==tr("Ajouter Mot-Clef"):
195            self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
196         except :
197           pass
198
199       
200   def BuildLBNouvCommande(self):
201         self.LBNouvCommande.clear()
202
203         jdc=self.node.item.object.get_jdc_root()
204
205         listeGroupes,dictGroupes=jdc.get_groups()
206         if "CACHE" in dictGroupes.keys():
207            aExclure=dictGroupes["CACHE"]
208         else:
209            aExclure=()
210         if ((self.editor.mode_nouv_commande == "alpha") and (hasattr(self,'RBalpha'))):
211            self.RBalpha.setChecked(True)
212            self.RBGroupe.setChecked(False)
213            listeCmd = jdc.get_liste_cmd()
214            for aCmd in listeCmd:
215               if aCmd not in aExclure :
216                  self.LBNouvCommande.addItem( aCmd )
217         elif self.editor.mode_nouv_commande== "groupe" :
218            self.RBGroupe.setChecked(True)
219            self.RBalpha.setChecked(False)
220
221            listeGroupes,dictGroupes=jdc.get_groups()
222            for grp in listeGroupes:
223               if grp == "CACHE":continue
224               listeCmd=dictGroupes[grp]
225               texte="GROUPE : "+grp
226               self.LBNouvCommande.addItem( texte )
227               self.LBNouvCommande.addItem( " " )
228               for aCmd in listeCmd:
229                 if aCmd not in aExclure :
230                  self.LBNouvCommande.addItem( aCmd)
231               self.LBNouvCommande.addItem( " " )
232         elif self.editor.mode_nouv_commande== "initial" :
233            listeCmd =  self.editor.Commandes_Ordre_Catalogue
234            listeCmd2=jdc.get_liste_cmd()
235            if len(listeCmd) != len(listeCmd2):
236                listeCmd = listeCmd2
237            for aCmd in listeCmd:
238               if aCmd not in aExclure :
239                  self.LBNouvCommande.addItem( aCmd )
240         #QObject.connect( self.LBNouvCommande, SIGNAL("itemClicked(QListWidgetItem*)"),self.DefCmd )
241         QObject.connect( self.LBNouvCommande, SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefCmd )
242
243   def BuildLBNouvCommandChanged(self) :
244         if self.RBalpha.isChecked():
245            self.editor.mode_nouv_commande="alpha"
246         else :
247            self.editor.mode_nouv_commande="groupe"
248         self.BuildLBNouvCommande()
249         self.LEFiltre.setFocus()
250
251   def DefCmd(self):
252         if self.LBNouvCommande.currentItem()== 0 : return
253         if self.LBNouvCommande.currentItem()== None : return
254         name=str(self.LBNouvCommande.currentItem().text())
255         if name==QString(" "):
256            return
257         if name.find("GROUPE :")==0 :
258            return
259         self.editor.init_modif()
260         new_node = self.node.append_brother(name,'after')
261
262
263   def LEFiltreTextChanged(self):
264         self.NbRecherches = 0
265         try :
266            MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0]
267            self.LBNouvCommande.setCurrentItem(MonItem)
268         except :
269            pass
270
271   def LEfiltreReturnPressed(self):
272         self.DefCmd()
273
274   def BNextPressed(self):
275         self.NbRecherches = self.NbRecherches + 1
276         monItem = None
277         try :
278             MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[self.NbRecherches]
279         except :
280             try : # ce try sert si la liste est vide
281                MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0]
282                self.NbRecherches = 0
283             except :
284                return
285         self.LBNouvCommande.setCurrentItem(MonItem)
286
287   def LBNouvCommandeClicked(self):
288         name=str(self.LBNouvCommande.currentText())
289
290
291 # ---------------------------- #
292 class QTPanelTBW3(QTPanel):
293 # ---------------------------- #
294
295   """
296   Classe contenant les methodes necessaires a l onglet "Nommer Concept"  
297   si non reentrant
298   herite de QTPanel                   # Attention n appelle pas le __init__
299   Gere plus precisement :
300   """
301
302   def __init__(self,node, parent = None):
303         self.editor    = parent
304         self.node      = node
305         type_sd = self.node.item.get_type_sd_prod()
306         nomConcept = self.node.item.GetText()
307         self.typeConcept.setText(type_sd)
308         self.LENomConcept.setText("")
309         self.LENomConcept.setText(nomConcept)
310         self.LENomConcept.setFocus()
311         if self.node.item.is_reentrant():
312            self.makeConceptPage_reentrant()
313         else :
314            self.listBoxASSD.close()
315
316   def makeConceptPage_reentrant(self):
317         self.bOk.close()
318         self.LENomConcept.close()
319         self.Label2.close()
320         self.Label3.close()
321         self.typeConcept.close()
322         self.LENomConcept.close()
323         self.Label1.setText(tr("<font size=\"+1\"><p align=\"center\">Structures de donnees a enrichir\n"
324 " par l\'operateur courant :</p></font>"))
325         listeNomsSD = self.node.item.get_noms_sd_oper_reentrant()
326         for aSD in listeNomsSD:
327             self.listBoxASSD.addItem( aSD)
328         QObject.connect(self.listBoxASSD, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.ClicASSD )
329
330         
331   def ClicASSD(self):
332         if self.listBoxASSD.currentItem()== None : return
333         val=self.listBoxASSD.currentItem().text()
334         nom=str(val)
335         nom = string.strip(nom)
336         test,mess = self.node.item.nomme_sd(nom)
337         if (test== 0):
338            self.editor.affiche_infos(mess,Qt.red)
339
340   def LENomConceptReturnPressed(self):
341         """
342         Nomme le concept SD retourne par l'etape
343         """
344         nom = str(self.LENomConcept.text())
345         nom = string.strip(nom)
346         if nom == '' : return                  # si pas de nom, on ressort sans rien faire
347         self.editor.init_modif()
348         test,mess = self.node.item.nomme_sd(nom)
349         #Notation scientifique
350         from politiquesValidation import Validation
351         validation=Validation(self.node,self.editor)
352         validation.AjoutDsDictReelEtape()
353         self.editor.affiche_infos(mess)
354
355 # ------------------------------- #
356 from desViewTexte import Ui_dView
357 class ViewText(Ui_dView,QDialog):
358 # ------------------------------- #
359     """
360     Classe permettant la visualisation de texte
361     """
362     def __init__(self,parent,editor=None,entete=None):
363         QDialog.__init__(self,parent)
364         self.editor=editor
365         self.setupUi(self)
366
367         self.resize( QSize(600,600).expandedTo(self.minimumSizeHint()) )
368         self.connect( self.bclose,SIGNAL("clicked()"), self, SLOT("close()") )
369         self.connect( self.bsave,SIGNAL("clicked()"), self.saveFile )
370         if entete != None : self.setWindowTitle (entete)
371
372         
373     def setText(self, txt ):    
374         self.view.setText(txt)
375         
376     def saveFile(self):
377         #recuperation du nom du fichier
378         if self.editor != None :
379            dir=self.editor.appliEficas.CONFIGURATION.savedir
380         else:
381            dir='/tmp'
382         fn = QFileDialog.getSaveFileName(None,
383                 tr("Sauvegarder le fichier"),
384                 dir)
385         if fn.isNull() : return
386         ulfile = os.path.abspath(unicode(fn))
387         if self.editor != None :
388            self.editor.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
389         try:
390            f = open(fn, 'wb')
391            f.write(str(self.view.toPlainText()))
392            f.close()
393            return 1
394         except IOError, why:
395            QMessageBox.critical(self, tr("Sauvegarder le fichier"),
396                 tr("Le fichier <b>%(v_1)s</b> n'a pu etre sauvegarde. <br>Raison : %(v_2)s", {'v_1': unicode(fn), 'v_2': unicode(why)}))
397            return
398