]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT/qtCommun.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / InterfaceQT / qtCommun.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 # Modules Python
22 import string,types,os
23 import traceback
24
25 from qt import *
26 import prefsQT
27
28 # Import des panels
29
30 # ---------- #
31 class QTPanel:
32 # ---------- #
33   """
34   Classe contenant les méthodes Qt communes a tous les panneaux droits
35   Tous les panneaux Mon...Panel héritent de cette classe
36   Gére plus précisement :
37      - l affichage de la doc
38      - le bouton Suppression (BSupPressed)
39      - la mutualisation de l affichage des regles
40   """
41   def __init__(self,node, parent = None):
42         self.editor    = parent
43         self.node      = node
44         
45   def BSupPressed(self):
46         self.editor.init_modif()
47         self.node.delete()
48         
49   def ViewDoc(self) :
50       cle_doc = self.node.item.get_docu()
51       if cle_doc == None :
52          QMessageBox.information( self.editor, "Documentation Vide", \
53                                   "Aucune documentation Aster n'est associée à ce noeud")
54          return
55       cle_doc = string.replace(cle_doc,'.','')
56       cle_doc = string.replace(cle_doc,'-','')
57       commande = self.editor.appliEficas.CONFIGURATION.exec_acrobat
58       try :
59          f=open(commande,"rb")
60       except :
61          texte="impossible de trouver la commande  " + commande
62          QMessageBox.information( self.editor, "Lecteur PDF", texte)
63          return
64       nom_fichier = cle_doc+".pdf"
65       fichier = os.path.abspath(os.path.join(self.editor.CONFIGURATION.path_doc,
66                                        nom_fichier))
67       try :
68          f=open(fichier,"rb")
69       except :
70          texte="impossible d'ouvrir " + fichier
71          QMessageBox.information( self.editor, "Documentation Vide", texte)
72          return
73       if os.name == 'nt':
74           os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
75       elif os.name == 'posix':
76           script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
77           pid = os.system(script)
78
79   def BOkPressed(self):
80         """ Impossible d utiliser les vrais labels avec designer ?? """
81         label=self.TWChoix.tabLabel(self.TWChoix.currentPage())
82         if label==QString("Nouvelle Commande"):
83            self.DefCmd()
84         if label==QString("Nommer Concept"):
85            self.LENomConceptReturnPressed()
86         if label==QString("Ajouter Mot-Clef"):
87            self.DefMC()
88         if label==QString("Définition Formule"):
89            self.BOkPressedFormule()
90         if label==QString("Valeur Parametre"):
91            self.BOkParamPressed()
92         if label==QString("Fichier Include"):
93            self.BOkIncPressed()
94         if label==QString("Commentaire"):
95            self.TexteCommentaireEntre()
96
97   def BParametresPressed(self):
98         liste=self.node.item.get_liste_param_possible()
99         from monListeParamPanel import MonListeParamPanel
100         MonListeParamPanel(liste=liste,parent=self).show()
101        
102   def AppelleBuildLBRegles(self):
103         listeRegles     = self.node.item.get_regles()
104         listeNomsEtapes = self.node.item.get_mc_presents()
105         self.BuildLBRegles(listeRegles,listeNomsEtapes)
106
107
108   def BuildLBRegles(self,listeRegles,listeNomsEtapes):
109         if len(listeRegles) > 0:
110            for regle in listeRegles :
111               texteRegle=regle.gettext()
112               texteMauvais,test = regle.verif(listeNomsEtapes)
113               for ligne in texteRegle.split("\n") :
114                  if ligne == "" :
115                     self.LBRegles.insertItem(ligne)
116                     continue
117                  if ligne[0]=="\t" :
118                     ligne="     "+ligne[1:]
119                  if test :
120                     self.LBRegles.insertItem(ligne)
121                  else :
122                     self.LBRegles.insertItem(itemColore(ligne))
123
124
125 # ----------------------- #
126 class QTPanelTBW1(QTPanel):
127 # ----------------------- #
128   """
129   Classe contenant les méthodes nécessaires a l onglet "Ajouter Mot-Clef"  
130   hérite de QTPanel  # Attention n appelle pas le __init__
131   Gére plus précisement :
132   """
133   def __init__(self,node, parent = None):
134         self.editor    = parent
135         self.node      = node
136         self.BuildLBMCPermis()
137         self.AppelleBuildLBRegles()
138
139   def BuildLBMCPermis(self):
140         self.LBMCPermis.clear()
141         try :
142            QObject.disconnect(self.LBMCPermis,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefMC)
143         except :
144            # normal pour la première fois qu on passe
145            # peut-etre inutile selon le connect ??
146            pass
147         QObject.connect(self.LBMCPermis,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefMC)
148
149         jdc = self.node.item.get_jdc()
150         genea =self.node.item.get_genealogie()
151         liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
152         for aMc in liste_mc:
153            self.LBMCPermis.insertItem( aMc)
154
155
156   def DefMC(self):
157         """ On ajoute un mot-clé à  la commande : subnode """
158         if self.LBMCPermis.selectedItem() == None : return
159         name=str(self.LBMCPermis.selectedItem().text())
160         self.editor.init_modif()
161         self.node.append_child(name)
162
163 # ---------------------------- #
164 class QTPanelTBW2(QTPanel):
165 # ---------------------------- #
166   """
167   Classe contenant les méthodes nécessaires a l onglet "Nouvelle Commande"  
168   hérite de QTPanel  # Attention n appelle pas le __init__
169   Gére plus précisement :
170   """
171
172   def __init__(self,node, parent = None, racine = 0):
173         self.editor    = parent
174         self.node      = node
175         self.BuildLBNouvCommande()
176         if racine == 1 : self.AppelleBuildLBRegles()
177
178       
179   def BuildLBNouvCommande(self):
180         self.LBNouvCommande.clear()
181         try :
182            QObject.disconnect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefCmd)
183         except :
184            # normal pour la première fois qu on passe
185            # peut-etre inutile selon le connect ??
186            pass
187
188         jdc=self.node.item.object.get_jdc_root()
189         if self.RBalpha.isOn():
190            listeCmd = jdc.get_liste_cmd()
191            for aCmd in listeCmd:
192               self.LBNouvCommande.insertItem( aCmd )
193         else :
194            listeGroupes,dictGroupes=jdc.get_groups()
195            for grp in listeGroupes:
196               if grp == "CACHE":continue
197               listeCmd=dictGroupes[grp]
198               texte="GROUPE : "+grp
199               self.LBNouvCommande.insertItem( texte )
200               self.LBNouvCommande.insertItem( " " )
201               for aCmd in listeCmd:
202                  self.LBNouvCommande.insertItem( aCmd)
203               self.LBNouvCommande.insertItem( " " )
204         QObject.connect( self.LBNouvCommande, SIGNAL("doubleClicked(QListBoxItem*)"),self.DefCmd )
205         QObject.connect( self.LBNouvCommande, SIGNAL("returnPressed(QListBoxItem*)"),self.DefCmd )
206
207   def DefCmd(self):
208         if (self.editor.focusWidget())!=self.LBNouvCommande :
209             return 
210         if self.LBNouvCommande.selectedItem()== 0 : return
211         if self.LBNouvCommande.selectedItem()== None : return
212         name=str(self.LBNouvCommande.selectedItem().text())
213         if name==QString(" "):
214            return
215         if name.find("GROUPE :")==0 :
216            return
217         self.editor.init_modif()
218         new_node = self.node.append_brother(name,'after')
219
220
221   def LEFiltreTextChanged(self):
222         MonItem=self.LBNouvCommande.findItem(self.LEFiltre.text().upper(),Qt.Contains)
223         if MonItem != None :
224            self.LBNouvCommande.setCurrentItem(MonItem)
225            self.LBNouvCommande.setSelected(MonItem,1)
226         try :
227            QObject.disconnect(self.LBNouvCommande,SIGNAL("returnPressed(QListBoxItem*)"),self.DefCmd)
228         except :
229            pass
230
231   def LEfiltreReturnPressed(self):
232         self.DefCmd()
233
234   def BNextPressed(self):
235         MonItem=self.LBNouvCommande.findItem(self.LEFiltre.text().upper(),Qt.Contains)
236         if MonItem != None :
237            self.LBNouvCommande.setCurrentItem(self.LBNouvCommande.currentItem()+1)
238            self.LEFiltreTextChanged()
239
240   def LBNouvCommandeClicked(self):
241         name=str(self.LBNouvCommande.currentText())
242
243
244 # ---------------------------- #
245 class QTPanelTBW3(QTPanel):
246 # ---------------------------- #
247
248   """
249   Classe contenant les méthodes nécessaires a l onglet "Nommer Concept"  
250   si non réentrant
251   hérite de QTPanel                   # Attention n appelle pas le __init__
252   Gére plus précisement :
253   """
254
255   def __init__(self,node, parent = None):
256         self.editor    = parent
257         self.node      = node
258         type_sd = self.node.item.get_type_sd_prod()
259         nomConcept = self.node.item.GetText()
260         self.typeConcept.setText(type_sd)
261         self.LENomConcept.setText("")
262         self.LENomConcept.setText(nomConcept)
263         
264
265
266   def LENomConceptReturnPressed(self):
267         """
268         Nomme le concept SD retourne par l'etape
269         """
270         nom = str(self.LENomConcept.text())
271         nom = string.strip(nom)
272
273         if nom == '' : return                  # si pas de nom, on ressort sans rien faire
274
275         self.editor.init_modif()
276         test,mess = self.node.item.nomme_sd(nom)
277         self.editor.affiche_infos(mess)
278
279 # ----------------------- #
280 class ViewText(QDialog):
281 # ----------------------- #
282     """
283     Classe permettant la visualisation de texte
284     """
285     def __init__(self,parent = None,name = None,modal = 0,fl = 0):
286         QDialog.__init__(self,parent,name,modal,fl)
287         
288         l1 = QVBoxLayout(self,11,6,)
289         self.view = QTextEdit(self)
290         self.view.setReadOnly(True)
291
292         l2 = QHBoxLayout(None,0,6)
293         Horizontal_Spacing2 = QSpacerItem(220,20,QSizePolicy.Expanding,QSizePolicy.Minimum)                
294         bclose= QPushButton(self)
295         bclose.setText(self.trUtf8( "Fermer"))
296         bsave= QPushButton(self)
297         bsave.setText(self.trUtf8( "Sauver"))
298         l2.addItem(Horizontal_Spacing2)
299         l2.addWidget(bsave)
300         l2.addWidget(bclose)
301                 
302         l1.addWidget(self.view)        
303         l1.addLayout(l2)
304
305         self.resize( QSize(600,507).expandedTo(self.minimumSizeHint()) )
306         self.connect( bclose,SIGNAL("clicked()"), self, SLOT("close()") )
307         self.connect( bsave,SIGNAL("clicked()"), self.saveFile )
308         
309     def setText(self, txt ):    
310         self.view.setText(txt)
311         
312     def saveFile(self):
313         #recuperation du nom du fichier
314         fn = QFileDialog.getSaveFileName(None,
315                 self.trUtf8("All Files (*)"), self, None,
316                 self.trUtf8("Save File"), '', 0)                
317         if not fn.isNull():                
318            if QFileInfo(fn).exists():
319               abort = QMessageBox.warning(self,
320                         self.trUtf8("Save File"),
321                         self.trUtf8("The file <b>%1</b> already exists.")
322                             .arg(fn),
323                         self.trUtf8("&Overwrite"),
324                         self.trUtf8("&Abort"), None, 1)
325               if abort:
326                  return
327            fn = unicode(QDir.convertSeparators(fn))                
328         else:
329            return
330
331         #ecriture du fichier
332         try:
333            f = open(fn, 'wb')
334            f.write(str(self.view.text()))
335            f.close()
336            return 1
337         except IOError, why:
338            QMessageBox.critical(self, self.trUtf8('Save File'),
339                 self.trUtf8('The file <b>%1</b> could not be saved.<br>Reason: %2')
340                     .arg(unicode(fn)).arg(str(why)))
341            return
342
343
344 #-------------------------------
345 class itemColore(QListBoxText):
346 #-------------------------------
347     def paint(self,p):
348         p.setPen(Qt.red)
349         QListBoxText.paint(self,p);