Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / configuration_ASTER.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 """
22     Ce module sert pour charger les paramètres de configuration d'EFICAS
23 """
24 # Modules Python
25 print "dans Aster"
26 import os, sys, string, types, re
27 import traceback
28
29
30 # Modules Eficas
31 from Editeur import utils
32
33 class CONFIGbase:
34
35   #-----------------------------------
36   def __init__(self,appli):
37   #-----------------------------------
38
39   # Classe de base permettant de lire, afficher
40   # et sauvegarder les fichiers utilisateurs editeur.ini
41   # et style.py
42   # Classe Mere de : class CONFIG(CONFIGbase)
43   #                  class CONFIGStyle(CONFIGbase):
44       self.appli = appli  
45       self.salome = appli.salome
46       self.dRepMat={}
47       if self.appli:
48          self.parent=appli.top
49       else:
50          self.parent=None
51       self.rep_user = utils.get_rep_user()
52       if not os.path.isdir(self.rep_user) : os.mkdir(self.rep_user)
53       self.lecture_fichier_ini_standard()
54       self.lecture_catalogues_standard()
55       self.lecture_fichier_ini_utilisateur()
56       self.init_liste_param()
57       
58
59   #--------------------------------------
60   def lecture_fichier_ini_standard(self):
61   #--------------------------------------
62   # Verifie l'existence du fichier "standard"
63   # appelle la lecture de ce fichier
64       if not os.path.isfile(self.fic_ini):
65           if self.appli.ihm=="TK" :
66               from widgets import showerror
67               showerror("Erreur","Pas de fichier de configuration" + self.fic_ini+"\n")
68           print "Erreur à la lecture du fichier de configuration : %s" % self.fic_ini
69           sys.exit(0)
70       self.lecture_fichier(self.fic_ini)
71
72   #-----------------------------
73   def lecture_fichier(self,fic):
74   #------------------------------
75   # lit les paramètres du fichier eficas.ini ou style.py
76   # les transforme en attribut de l 'objet  
77   # utilisation du dictionnaire local pour récuperer style
78       txt = utils.read_file(fic)
79       from styles import style
80       d=locals()
81       try:
82          exec txt in d
83       except:
84          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
85          if self.appli.ihm=="TK" :
86               from widgets import showerror
87               showerror("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
88          print ("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
89          sys.exit()
90
91       for k in d.keys() :
92           if  k in self.labels.keys()  :
93              setattr(self,k,d[k])
94     # Glut horrible pour les repertoires materiau...
95           elif k[0:9]=="rep_mat_v" :
96              setattr(self,k,d[k])
97       
98       for k in d['style'].__dict__.keys() :
99           setattr(self,k,d['style'].__dict__[k])
100
101       if hasattr(self,"catalogues") :
102          for ligne in self.catalogues :
103             version=ligne[1]
104             codeSansPoint=re.sub("\.","",version)
105             chaine="rep_mat_"+codeSansPoint
106             if hasattr(self,chaine):
107                rep_mat=getattr(self,chaine)
108                self.dRepMat[version]=str(rep_mat)
109
110
111   #--------------------------------------
112   def lecture_fichier_ini_utilisateur(self):
113   #--------------------------------------
114   # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
115       self.fic_ini_utilisateur = os.path.join(self.rep_user,self.fichier)
116       if not os.path.isfile(self.fic_ini_utilisateur):
117           return
118       self.lecture_fichier(self.fic_ini_utilisateur)
119
120   #--------------------------------------
121   def lecture_catalogues_standard(self):
122   #--------------------------------------
123       # repertoires Materiau
124       if hasattr(self,"catalogues") :
125          for ligne in self.catalogues :
126             version=ligne[1]
127             cata=ligne[2]
128             self.dRepMat[version]=os.path.join(cata,'materiau')
129
130   #--------------------------------------
131   def affichage_fichier_ini(self):
132   #--------------------------------------
133       """
134       Affichage des valeurs des paramètres relus par Eficas
135       """
136       import widgets
137       result = widgets.Formulaire(self.parent,
138                                   obj_pere = self,
139                                   titre = self.titre,
140                                   texte = self.texte_ini,
141                                   items = self.l_param,
142                                   mode='display',
143                                   commande=('Modifier',self.commande))
144       if result.resultat :
145           #print 'on sauvegarde les nouveaux paramètres :',result.resultat
146           self.save_param_ini(result.resultat)
147
148   #--------------------------------------
149   def save_param_ini(self,dico):
150   #--------------------------------------
151   # sauvegarde
152   # les nouveaux paramètres dans le fichier de configuration utilisateur
153   #
154       f=open(self.fic_ini_utilisateur,'w+')
155       for k,v in dico.items():
156          if self.types[k] in ('mot2','mot3','mot4'): 
157             v1=v[1:-1]
158             val=v1.split(",")
159             p = "(" 
160             listeval=""
161             for valeur in val:
162               listeval = listeval+ p + str(valeur) 
163               p=" , "
164             listeval = listeval + ")"
165             f.write(str(self.pref)+str(k) + '=' + str(listeval) + '\n') 
166          elif k == 'catalogues' :
167             f.write(k + '\t=\t' + str(v) + '\n')
168          else:
169             f.write(str(self.pref)+str(k) + '\t=\t"' + str(v) + '"\n')
170       f.close()
171       self.lecture_fichier_ini_utilisateur()
172
173   #-------------------------------------------
174   def creation_fichier_ini_si_possible(self):
175   #-------------------------------------------
176       return self.creation_fichier_ini(mode='ignorer_annuler')
177
178   #--------------------------------------------------------
179   def creation_fichier_ini(self,mode='considerer_annuler'):
180   #---------------------------------------------------------
181   # Récupération des valeurs des paramétres requis pour la création du fichier
182   # eficas.ini
183   #
184       import widgets
185       items = self.l_param
186       result = widgets.Formulaire(self.parent,
187                                   obj_pere = self,
188                                   titre = "Saisie des donnees indispensables a la configuration d'EFICAS",
189                                   texte = self.texte,
190                                   items = items,
191                                   mode='query')
192       if not result.resultat :
193           if mode == 'considerer_annuler':
194              test=0
195              if self.appli.ihm=="TK" :
196                 from widgets import showerror,askretrycancel
197                 test = askretrycancel("Erreur","Données incorrectes !")
198              if not test:
199                  # XXX On sort d'EFICAS, je suppose
200                  self.appli.exitEFICAS()
201              else:
202                  self.creation_fichier_ini()
203           else:
204               return None
205       else :
206           self.save_param_ini(result.resultat)
207           return result.resultat
208
209   #--------------------------
210   def init_liste_param (self):
211   #--------------------------
212   # construit self.l_param 
213   # a partir de self.labels et des attributs 
214   # de l objet (mis a jour lors de la lecture du fichier)
215   # l_param est une liste de tuples où chaque tuple est de la forme :
216   #           (label,nature,nom_var,defaut)
217
218       self.l_param=[]
219       for k in self.labels.keys()  :
220           if hasattr(self,k) :
221              if k in self.YesNo.keys():
222                 self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k],
223                                      self.YesNo[k][0],self.YesNo[k][1]))
224              else :
225                 self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k]))
226       self.l_param = tuple(self.l_param)
227
228
229 class CONFIG(CONFIGbase):
230   def __init__(self,appli,repIni):
231
232       self.dFichierEditeur={"ASTER"                    : "editeur.ini", 
233                             "ASTER_SALOME"             : "editeur_salome.ini"}
234       self.texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\
235               "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\
236               "Si vous annulez, EFICAS ne se lancera pas !!"
237
238       self.salome=appli.salome
239       self.code=appli.code
240       clef=self.code
241       if self.salome != 0 :
242           clef = clef + "_SALOME"
243       self.fichier=self.dFichierEditeur[clef]
244       self.repIni = repIni
245       self.rep_ini = repIni
246       self.fic_ini = os.path.join(self.repIni,self.fichier)
247       self.titre = 'Parametres necessaires a la configuration d\'EFICAS'
248       self.texte_ini = "Voici les paramètres que requiert Eficas"
249       self.commande = self.creation_fichier_ini_si_possible
250       self.labels={"savedir"       : "Répertoire initial pour Open/Save des fichiers",
251                    "rep_travail"   : "Répertoire de travail",
252                    "rep_mat"       : "Répertoire materiaux",
253                    "path_doc"      : "Chemin d'accès à la doc Aster",
254                    "exec_acrobat"  : "Ligne de commande Acrobat Reader",
255                    "catalogues"    : "Versions du code ",
256                    "isdeveloppeur" : "Niveau de message ",
257                    "path_cata_dev" : "Chemin d'accès aux catalogues développeurs"}
258
259                    
260       self.types ={"savedir":"rep", "rep_travail":"rep","rep_mat":"rep",
261                    "path_doc": "rep","exec_acrobat":"file","exec_acrobat":"file",
262                    "catalogues" :"cata","isdeveloppeur":"YesNo","path_cata_dev":"rep",
263                    "DTDDirectory":"rep"}
264
265       self.YesNo={}
266       self.YesNo['isdeveloppeur']=('Deboggage','Utilisation')
267
268       # Valeurs par defaut
269       self.rep_user = utils.get_rep_user()
270       self.initialdir=self.rep_user
271       self.savedir = os.environ['HOME']
272       self.rep_travail=os.path.join(self.rep_user,'uaster','tmp_eficas')
273       self.rep_mat=""
274       self.path_doc=self.rep_user
275       self.exec_acrobat=self.rep_user
276       self.isdeveloppeur='NON'
277       self.path_cata_dev=os.path.join(self.rep_user,'cata')
278       CONFIGbase.__init__ (self,appli)
279       self.pref=""
280
281   #--------------------------------------
282   def save_params(self):
283   #--------------------------------------
284   # sauvegarde
285   # les nouveaux paramètres dans le fichier de configuration utilisateur
286   #
287       l_param=('exec_acrobat', 'repIni','catalogues','rep_travail','rep_mat','path_doc','savedir')
288       texte=""
289       for clef in l_param :
290           if hasattr(self,clef):
291              valeur=getattr(self,clef)
292              texte= texte + clef+"      = " + repr(valeur) +"\n"
293
294
295       # recuperation des repertoires materiaux
296       try :
297           for item in self.catalogues :
298               try :
299                   (code,version,cata,format,defaut)=item
300               except :
301                   (code,version,cata,format)=item
302               codeSansPoint=re.sub("\.","",version)
303               chaine="rep_mat_"+codeSansPoint
304               if hasattr(self,chaine):
305                  valeur=getattr(self,chaine)
306                  texte= texte + chaine+"        = '" + str(valeur) +"'\n"
307       except :
308              pass
309
310       f=open(self.fic_ini_utilisateur,'w+')
311       f.write(texte) 
312       f.close()
313
314
315 class CONFIGStyle(CONFIGbase):
316   def __init__(self,appli,repIni):
317       self.salome=appli.salome
318       self.texte = "Pour prendre en compte les modifications \n"+\
319                    "     RELANCER EFICAS"
320       self.fichier="style.py"
321       self.repIni = repIni
322       self.rep_ini = repIni
323       self.fic_ini = os.path.join(self.repIni,self.fichier)
324       self.titre = "Parametres d affichage"
325       self.texte_ini = "Voici les paramètres configurables :  "
326       self.commande = self.creation_fichier_ini_si_possible
327       self.labels={"background":"couleur du fonds", 
328                    "foreground":"couleur de la police standard" ,
329                    "standard":" police et taille standard",
330                    "standard_italique":"police utilisée pour l'arbre ",
331                    "standard_gras_souligne":"police utilisée pour le gras souligné",
332                    "canvas_italique":"police italique",
333                    "standard_gras":"gras",
334                   }
335       self.types ={"background":"mot", 
336                    "foreground":"mot" ,
337                    "standard":"mot2",
338                    "standard_italique":"mot3",
339                    "standard_gras":"mot3",
340                    "standard_gras_souligne":"mot4",
341                    "canvas":"mot2",
342                    "canvas_italique":"mot3",
343                    "canvas_gras":"mot3",
344                    "canvas_gras_italique":"mot4",
345                    "standard12":"mot2",
346                    "standard12_gras":"mot3",
347                    "standard12_gras_italique":"mot4",
348                    "statusfont":"mot2",
349                    "standardcourier10":"mot2"}
350       self.YesNo={}
351       self.l_param=[]
352       CONFIGbase.__init__ (self,appli)
353       self.pref="style."
354
355   def affichage_style_ini(self):
356       self.affichage_fichier_ini()
357
358 def make_config(appli,rep):
359     return CONFIG(appli,rep)
360
361 def make_config_style(appli,rep):
362     return CONFIGStyle(appli,rep)
363
364