]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/qtCommun.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / InterfaceQT4 / 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 PyQt4 import *
26 from PyQt4.QtGui import *
27 from PyQt4.QtCore import *
28 import prefsQT
29
30 # Import des panels
31
32 # ---------- #
33 class QTPanel:
34 # ---------- #
35   """
36   Classe contenant les méthodes Qt communes a tous les panneaux droits
37   Tous les panneaux Mon...Panel héritent de cette classe
38   Gére plus précisement :
39      - l affichage de la doc
40      - le bouton Suppression (BSupPressed)
41      - la mutualisation de l affichage des regles
42   """
43   def __init__(self,node, parent = None):
44         self.editor    = parent
45         self.node      = node
46         
47   def BSupPressed(self):
48         self.editor.init_modif()
49         self.node.delete()
50         
51   def ViewDoc(self) :
52       cle_doc = self.node.item.get_docu()
53       if cle_doc == None :
54          QMessageBox.information( self.editor, "Documentation Vide", \
55                                   "Aucune documentation Aster n'est associée à ce noeud")
56          return
57       cle_doc = string.replace(cle_doc,'.','')
58       cle_doc = string.replace(cle_doc,'-','')
59       commande = self.editor.appliEficas.CONFIGURATION.exec_acrobat
60       try :
61          f=open(commande,"rb")
62       except :
63          texte="impossible de trouver la commande  " + commande
64          QMessageBox.information( self.editor, "Lecteur PDF", texte)
65          return
66       nom_fichier = cle_doc+".pdf"
67       fichier = os.path.abspath(os.path.join(self.editor.CONFIGURATION.path_doc,
68                                        nom_fichier))
69       try :
70          f=open(fichier,"rb")
71       except :
72          texte="impossible d'ouvrir " + fichier
73          QMessageBox.information( self.editor, "Documentation Vide", texte)
74          return
75       if os.name == 'nt':
76           os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
77       elif os.name == 'posix':
78           script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
79           pid = os.system(script)
80
81   def BOkPressed(self):
82         """ Impossible d utiliser les vrais labels avec designer ?? """
83         label=self.TWChoix.tabText(self.TWChoix.currentIndex())
84         #print label
85         if label==QString("Nouvelle Commande"):
86            self.DefCmd()
87         if label==QString("Nommer Concept"):
88            self.LENomConceptReturnPressed()
89         if label==QString("Ajouter Mot-Clef"):
90            if self.LBMCPermis.currentItem() == None : return
91            self.DefMC(self.LBMCPermis.currentItem())
92         if label==QString("Définition Formule"):
93            self.BOkPressedFormule()
94         if label==QString("Valeur Parametre"):
95            self.BOkParamPressed()
96         if label==QString("Fichier Include"):
97            self.BOkIncPressed()
98
99   def BParametresPressed(self):
100         liste=self.node.item.get_liste_param_possible()
101         from monListeParamPanel import MonListeParamPanel
102         MonListeParamPanel(liste=liste,parent=self).show()
103        
104   def AppelleBuildLBRegles(self):
105         listeRegles     = self.node.item.get_regles()
106         listeNomsEtapes = self.node.item.get_mc_presents()
107         self.BuildLBRegles(listeRegles,listeNomsEtapes)
108
109
110   def BuildLBRegles(self,listeRegles,listeNomsEtapes):
111         self.LBRegles.clear()
112         if len(listeRegles) > 0:
113            for regle in listeRegles :
114               texteRegle=regle.gettext()
115               texteMauvais,test = regle.verif(listeNomsEtapes)
116               for ligne in texteRegle.split("\n") :
117                  if ligne == "" :
118                     self.LBRegles.addItem(ligne)
119                     continue
120                  if ligne[0]=="\t" :
121                     ligne="     "+ligne[1:]
122                  if test :
123                     self.LBRegles.addItem(ligne)
124                  else :
125                     
126                     monItem=QListWidgetItem(ligne)
127                     monItem.setForeground(Qt.red)
128                     self.LBRegles.addItem(monItem)
129
130
131 # ----------------------- #
132 class QTPanelTBW1(QTPanel):
133 # ----------------------- #
134   """
135   Classe contenant les méthodes nécessaires a l onglet "Ajouter Mot-Clef"  
136   hérite de QTPanel  # Attention n appelle pas le __init__
137   Gére plus précisement :
138   """
139   def __init__(self,node, parent = None):
140         self.editor    = parent
141         self.node      = node
142         self.BuildLBMCPermis()
143         self.AppelleBuildLBRegles()
144
145   def BuildLBMCPermis(self):
146         self.LBMCPermis.clear()
147         QObject.connect(self.LBMCPermis,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefMC)
148         jdc = self.node.item.get_jdc()
149         genea =self.node.item.get_genealogie()
150         liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
151         for aMc in liste_mc:
152            self.LBMCPermis.addItem( aMc)
153
154
155   def DefMC(self,item):
156         """ On ajoute un mot-clé à  la commande : subnode """
157         name=str(item.text())
158         self.editor.init_modif()
159         self.node.append_child(name)
160
161 # ---------------------------- #
162 class QTPanelTBW2(QTPanel):
163 # ---------------------------- #
164   """
165   Classe contenant les méthodes nécessaires a l onglet "Nouvelle Commande"  
166   hérite de QTPanel  # Attention n appelle pas le __init__
167   Gére plus précisement :
168   """
169
170   def __init__(self,node, parent = None, racine = 0):
171         self.editor    = parent
172         self.node      = node
173         self.BuildLBNouvCommande()
174         self.NbRecherches = 0
175         if racine == 1 : self.AppelleBuildLBRegles()
176
177       
178   def BuildLBNouvCommande(self):
179         self.LBNouvCommande.clear()
180
181         jdc=self.node.item.object.get_jdc_root()
182         if self.RBalpha.isChecked():
183            listeCmd = jdc.get_liste_cmd()
184            for aCmd in listeCmd:
185               self.LBNouvCommande.addItem( aCmd )
186         else :
187            listeGroupes,dictGroupes=jdc.get_groups()
188            for grp in listeGroupes:
189               if grp == "CACHE":continue
190               listeCmd=dictGroupes[grp]
191               texte="GROUPE : "+grp
192               self.LBNouvCommande.addItem( texte )
193               self.LBNouvCommande.addItem( " " )
194               for aCmd in listeCmd:
195                  self.LBNouvCommande.addItem( aCmd)
196               self.LBNouvCommande.addItem( " " )
197         #QObject.connect( self.LBNouvCommande, SIGNAL("itemClicked(QListWidgetItem*)"),self.DefCmd )
198         QObject.connect( self.LBNouvCommande, SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefCmd )
199
200   def DefCmd(self):
201         if (self.editor.focusWidget())!=self.LBNouvCommande :
202             return 
203         if self.LBNouvCommande.currentItem()== 0 : return
204         if self.LBNouvCommande.currentItem()== None : return
205         name=str(self.LBNouvCommande.currentItem().text())
206         if name==QString(" "):
207            return
208         if name.find("GROUPE :")==0 :
209            return
210         self.editor.init_modif()
211         print self.node
212         print name
213         new_node = self.node.append_brother(name,'after')
214
215
216   def LEFiltreTextChanged(self):
217         self.NbRecherches = 0
218         try :
219            MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0]
220            self.LBNouvCommande.setCurrentItem(MonItem)
221         except :
222            pass
223
224   def LEfiltreReturnPressed(self):
225         self.DefCmd()
226
227   def BNextPressed(self):
228         self.NbRecherches = self.NbRecherches + 1
229         monItem = None
230         try :
231             MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[self.NbRecherches]
232         except :
233             try : # ce try sert si la liste est vide
234                MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0]
235                self.NbRecherches = 0
236             except :
237                return
238         self.LBNouvCommande.setCurrentItem(MonItem)
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   def LENomConceptReturnPressed(self):
265         """
266         Nomme le concept SD retourne par l'etape
267         """
268         nom = str(self.LENomConcept.text())
269         nom = string.strip(nom)
270         if nom == '' : return                  # si pas de nom, on ressort sans rien faire
271         self.editor.init_modif()
272         test,mess = self.node.item.nomme_sd(nom)
273         self.editor.affiche_infos(mess)
274
275 # ------------------------------- #
276 from desViewTexte import Ui_dView
277 class ViewText(Ui_dView,QDialog):
278 # ------------------------------- #
279     """
280     Classe permettant la visualisation de texte
281     """
282     def __init__(self,parent):
283         QDialog.__init__(self,parent)
284         self.setupUi(self)
285
286         self.resize( QSize(600,507).expandedTo(self.minimumSizeHint()) )
287         self.connect( self.bclose,SIGNAL("clicked()"), self, SLOT("close()") )
288         self.connect( self.bsave,SIGNAL("clicked()"), self.saveFile )
289         
290     def setText(self, txt ):    
291         self.view.setText(txt)
292         
293     def saveFile(self):
294         #recuperation du nom du fichier
295         fn = QFileDialog.getSaveFileName(None,
296                 self.trUtf8("Save File"),
297                 self.trUtf8("/tmp"))
298         #if not fn.isNull():                
299         #   print "hhhhhhhhhhhhhhjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkk"
300         #   if QFileInfo(fn).exists():
301         #      abort = QMessageBox.warning(self,
302         #                self.trUtf8("Save File"),
303         #                self.trUtf8("The file <b>%1</b> already exists.")
304         #                    .arg(fn),
305         #                self.trUtf8("&Overwrite"),
306         #                self.trUtf8("&Abort"))
307         #      if abort:
308         #         return
309         #   fn = unicode(QDir.convertSeparators(fn))                
310         #else:
311         #   return
312
313         #ecriture du fichier
314         if fn.isNull() : return
315         try:
316            f = open(fn, 'wb')
317            f.write(str(self.view.toPlainText()))
318            f.close()
319            return 1
320         except IOError, why:
321            QMessageBox.critical(self, self.trUtf8('Save File'),
322                 self.trUtf8('The file <b>%1</b> could not be saved.<br>Reason: %2')
323                     .arg(unicode(fn)).arg(str(why)))
324            return
325