Salome HOME
PN : les listes sont maintenant "repeat" par defaut
[tools/eficas.git] / Editeur / eficas.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
19 # ======================================================================
20 """
21     Ce module contient la classe EFICAS qui est l'application
22     proprement dite. Elle est dérivée de la classe APPLI
23 """
24 # Modules Python
25 import string
26 from Tkinter import Label
27 import Pmw
28 from tkCommonDialog import Dialog
29 from tkFileDialog import *
30 from tkMessageBox import askyesno,showerror
31 import traceback
32
33 # Modules Eficas
34 import patches
35 import appli
36 from widgets import Fenetre
37
38 class EFICAS(appli.APPLI):
39
40   try:
41      from prefs import appli_composants
42   except:
43      appli_composants=['readercata','bureau','browser','options']
44
45   def get_texte_infos(self):
46      texte=appli.APPLI.get_texte_infos(self)
47      texte = texte + 'Catalogue utilisé : %s\n' %  self.bureau.fic_cata
48      return texte
49
50   def exitEFICAS(self):
51      self.bureau.exitEFICAS()
52
53   def browse(self,result):
54       if result == 'Browse':
55         self.ulfile = askopenfilename(title="Choix fichier :")
56         self._ulfile.setentry(self.ulfile)
57       elif result == 'OK':
58         self.ulfile = self._ulfile.get()
59         # On utilise le convertisseur défini par format_fichier
60         source=self.get_source(self.ulfile)
61         if source:
62            # On a réussi à convertir le fichier self.ulfile
63            self.dialog.deactivate(result)
64            self.text=source
65         else:
66            # Une erreur a été rencontrée
67            self.text=''
68       elif result == 'Cancel':
69         self._ulfile.setentry('')
70         self.dialog.deactivate(result)
71         self.ulfile = None
72         self.text=None
73
74   def get_file(self,unite=None,fic_origine = ''):
75       """ 
76           Retourne le nom du fichier correspondant a l unite logique unite (entier)
77       """
78       if unite :
79           titre = "Choix unite %d " %unite
80       else:
81           titre = "Choix d'un fichier de poursuite"
82       self.dialog=Pmw.Dialog(self.top,
83                              title = titre,
84                              buttons = ('OK', 'Browse','Cancel'),
85                              defaultbutton='OK',
86                              command=self.browse,
87                              )
88       self.dialog.withdraw()
89       if unite :
90           texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine
91           texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite
92       else:
93           texte="Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE')
94           texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite'
95       w = Label(self.dialog.interior(),
96                 text = texte)
97       w.pack(padx = 10, pady = 10)
98       if unite != None :
99           labeltexte = 'Fichier pour unite %d :' % unite
100       else:
101           labeltexte = 'Fichier à poursuivre :'
102       self._ulfile=Pmw.EntryField(self.dialog.interior(),
103                                   labelpos = 'w',
104                                   label_text = labeltexte,
105                                   )
106       self._ulfile.pack(fill='x', expand=1, padx=10, pady=5)
107       self._ulfile.component('entry').focus_set()
108       self.dialog.activate(geometry='centerscreenalways')
109       return self.ulfile,self.text
110
111   def get_source(self,file):
112       import convert
113       format=self.format_fichier.get()
114       # Il faut convertir le contenu du fichier en fonction du format
115       if convert.plugins.has_key(format):
116          # Le convertisseur existe on l'utilise
117          p=convert.plugins[format]()
118          p.readfile(file)
119          text=p.convert('execnoparseur')
120          if not p.cr.estvide():
121             self.affiche_infos("Erreur à la conversion")
122             Fenetre(self,
123                     titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
124                     texte = str(p.cr)).wait()
125             return text
126          return text
127       else:
128          # Il n'existe pas c'est une erreur
129          self.affiche_infos("Type de fichier non reconnu")
130          showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
131          return None
132
133   def affiche_texte(self,entete,texte):
134       """Cette methode ouvre une fenetre modale dans laquelle on affiche un texte
135       """
136       self.affiche_infos(entete)
137       f=Fenetre(self, titre=entete, texte = texte)
138       f.wait()
139