Salome HOME
Import dans la branche I26 de la version 7.1.16 modifiée par CCAR (au 18/9/2003)
[tools/eficas.git] / Editeur / eficas.py
1 """
2     Ce module contient la classe EFICAS qui est l'application
3     proprement dite. Elle est dérivée de la classe APPLI
4 """
5 # Modules Python
6 import string
7 from Tkinter import Label
8 import Pmw
9 from tkCommonDialog import Dialog
10 from tkFileDialog import *
11 from tkMessageBox import askyesno,showerror
12 import traceback
13
14 # Modules Eficas
15 import appli
16 from widgets import Fenetre
17
18 class EFICAS(appli.APPLI):
19
20   extensions=['readercata','bureau','browser','options']
21
22   def get_texte_infos(self):
23      texte=appli.APPLI.get_texte_infos(self)
24      texte = texte + 'Catalogue utilisé : %s\n' %  self.bureau.fic_cata
25      return texte
26
27   def exitEFICAS(self):
28      self.bureau.exitEFICAS()
29
30   def browse(self,result):
31       if result == 'Browse':
32         self.ulfile = askopenfilename(title="Choix fichier :")
33         self._ulfile.setentry(self.ulfile)
34       elif result == 'OK':
35         self.ulfile = self._ulfile.get()
36         # On utilise le convertisseur défini par format_fichier
37         source=self.get_source(self.ulfile)
38         if source:
39            # On a réussi à convertir le fichier self.ulfile
40            self.dialog.deactivate(result)
41            self.text=source
42         else:
43            # Une erreur a été rencontrée
44            self.text=''
45       elif result == 'Cancel':
46         self._ulfile.setentry('')
47         self.dialog.deactivate(result)
48         self.ulfile = None
49         self.text=''
50
51   def get_file(self,unite=None,fic_origine = ''):
52       """ 
53           Retourne le nom du fichier correspondant a l unite logique unite (entier)
54       """
55       if unite :
56           titre = "Choix unite %d " %unite
57       else:
58           titre = "Choix d'un fichier de poursuite"
59       self.dialog=Pmw.Dialog(self.top,
60                              title = titre,
61                              buttons = ('OK', 'Browse','Cancel'),
62                              defaultbutton='OK',
63                              command=self.browse,
64                              )
65       self.dialog.withdraw()
66       if unite :
67           texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine
68           texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite
69       else:
70           texte="Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE')
71           texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite'
72       w = Label(self.dialog.interior(),
73                 text = texte)
74       w.pack(padx = 10, pady = 10)
75       if unite != None :
76           labeltexte = 'Fichier pour unite %d :' % unite
77       else:
78           labeltexte = 'Fichier à poursuivre :'
79       self._ulfile=Pmw.EntryField(self.dialog.interior(),
80                                   labelpos = 'w',
81                                   label_text = labeltexte,
82                                   )
83       self._ulfile.pack(fill='x', expand=1, padx=10, pady=5)
84       self._ulfile.component('entry').focus_set()
85       self.dialog.activate(geometry='centerscreenalways')
86       return self.ulfile,self.text
87
88   def get_source(self,file):
89       import convert
90       format=self.format_fichier.get()
91       # Il faut convertir le contenu du fichier en fonction du format
92       if convert.plugins.has_key(format):
93          # Le convertisseur existe on l'utilise
94          p=convert.plugins[format]()
95          p.readfile(file)
96          text=p.convert('execnoparseur')
97          if not p.cr.estvide():
98             self.affiche_infos("Erreur à la conversion")
99             Fenetre(self,
100                     titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
101                     texte = str(p.cr)).wait()
102             return text
103          return text
104       else:
105          # Il n'existe pas c'est une erreur
106          self.affiche_infos("Type de fichier non reconnu")
107          showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
108          return None
109