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.
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.
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.
20 # ======================================================================
22 Ce module sert pour charger les paramètres de configuration d'EFICAS
25 import os, sys, string, types, re
29 from Editeur import utils
33 #-----------------------------------
34 def __init__(self,appli):
35 #-----------------------------------
37 # Classe de base permettant de lire, afficher
38 # et sauvegarder les fichiers utilisateurs editeur.ini
40 # Classe Mere de : class CONFIG(CONFIGbase)
41 # class CONFIGStyle(CONFIGbase):
44 self.salome = appli.salome
50 self.rep_user = utils.get_rep_user()
51 self.lecture_fichier_ini_standard()
52 self.lecture_catalogues_standard()
53 self.lecture_fichier_ini_utilisateur()
54 self.init_liste_param()
56 #--------------------------------------
57 def lecture_fichier_ini_standard(self):
58 #--------------------------------------
59 # Verifie l'existence du fichier "standard"
60 # appelle la lecture de ce fichier
61 if not os.path.isfile(self.fic_ini):
62 if self.appli.ihm=="TK" :
63 from widgets import showerror
64 showerror("Erreur","Pas de fichier de configuration" + self.fic_ini+"\n")
65 print "Erreur à la lecture du fichier de configuration : %s" % self.fic_ini
67 self.lecture_fichier(self.fic_ini)
69 #-----------------------------
70 def lecture_fichier(self,fic):
71 #------------------------------
72 # lit les paramètres du fichier eficas.ini ou style.py
73 # les transforme en attribut de l 'objet
74 # utilisation du dictionnaire local pour récuperer style
75 txt = utils.read_file(fic)
76 from InterfaceTK.styles import style
81 l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
82 if self.appli.ihm=="TK" :
83 from widgets import showerror
84 showerror("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
85 print "Erreur à la lecture du fichier de configuration : %s" % fic
89 if k in self.labels.keys() :
91 # Glut horrible pour les repertoires materiau...
92 elif k[0:9]=="rep_mat_v" :
95 for k in d['style'].__dict__.keys() :
96 setattr(self,k,d['style'].__dict__[k])
98 if hasattr(self,"catalogues") :
99 for ligne in self.catalogues :
101 codeSansPoint=re.sub("\.","",version)
102 chaine="rep_mat_"+codeSansPoint
103 if hasattr(self,chaine):
104 rep_mat=getattr(self,chaine)
105 self.dRepMat[version]=str(rep_mat)
107 #--------------------------------------
108 def lecture_fichier_ini_utilisateur(self):
109 #--------------------------------------
110 # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
111 self.fic_ini_utilisateur = os.path.join(self.rep_user,self.fichier)
112 if not os.path.isfile(self.fic_ini_utilisateur):
114 self.lecture_fichier(self.fic_ini_utilisateur)
116 #--------------------------------------
117 def lecture_catalogues_standard(self):
118 #--------------------------------------
119 # repertoires Materiau
120 if hasattr(self,"catalogues") :
121 for ligne in self.catalogues :
124 self.dRepMat[version]=os.path.join(cata,'materiau')
126 #--------------------------------------
127 def affichage_fichier_ini(self):
128 #--------------------------------------
130 Affichage des valeurs des paramètres relus par Eficas
133 result = widgets.Formulaire(self.parent,
136 texte = self.texte_ini,
137 items = self.l_param,
139 commande=('Modifier',self.commande))
141 #print 'on sauvegarde les nouveaux paramètres :',result.resultat
142 self.save_param_ini(result.resultat)
144 #--------------------------------------
145 def save_param_ini(self,dico):
146 #--------------------------------------
148 # les nouveaux paramètres dans le fichier de configuration utilisateur
150 f=open(self.fic_ini_utilisateur,'w+')
151 for k,v in dico.items():
152 if self.types[k] in ('mot2','mot3','mot4'):
158 listeval = listeval+ p + str(valeur)
160 listeval = listeval + ")"
161 f.write(str(self.pref)+str(k) + '=' + str(listeval) + '\n')
162 elif k == 'catalogues' :
163 f.write(k + '\t=\t' + str(v) + '\n')
165 f.write(str(self.pref)+str(k) + '\t=\t"' + str(v) + '"\n')
167 self.lecture_fichier_ini_utilisateur()
169 #-------------------------------------------
170 def creation_fichier_ini_si_possible(self):
171 #-------------------------------------------
172 return self.creation_fichier_ini(mode='ignorer_annuler')
174 #--------------------------------------------------------
175 def creation_fichier_ini(self,mode='considerer_annuler'):
176 #---------------------------------------------------------
177 # Récupération des valeurs des paramétres requis pour la création du fichier
182 result = widgets.Formulaire(self.parent,
184 titre = "Saisie des données indispensables à la configuration d'EFICAS",
188 if not result.resultat :
189 if mode == 'considerer_annuler':
191 if self.appli.ihm=="TK" :
192 from widgets import showerror,askretrycancel
193 test = askretrycancel("Erreur","Données incorrectes !")
195 # XXX On sort d'EFICAS, je suppose
196 self.appli.exitEFICAS()
198 self.creation_fichier_ini()
202 self.save_param_ini(result.resultat)
203 return result.resultat
205 #--------------------------
206 def init_liste_param (self):
207 #--------------------------
208 # construit self.l_param
209 # a partir de self.labels et des attributs
210 # de l objet (mis a jour lors de la lecture du fichier)
211 # l_param est une liste de tuples où chaque tuple est de la forme :
212 # (label,nature,nom_var,defaut)
215 for k in self.labels.keys() :
217 if k in self.YesNo.keys():
218 self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k],
219 self.YesNo[k][0],self.YesNo[k][1]))
221 self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k]))
222 self.l_param = tuple(self.l_param)
225 class CONFIG(CONFIGbase):
226 def __init__(self,appli,rep_ini):
227 self.texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\
228 "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\
229 "Si vous annulez, EFICAS ne se lancera pas !!"
230 self.salome=appli.salome
232 if self.salome == 0 :
233 self.fichier="editeur.ini"
235 self.fichier="editeur_salome.ini"
236 self.rep_ini = rep_ini
237 self.fic_ini = os.path.join(self.rep_ini,self.fichier)
238 self.titre = "Paramètres nécessaires à la configuration d'EFICAS"
239 self.texte_ini = "Voici les paramètres que requiert Eficas"
240 self.commande = self.creation_fichier_ini_si_possible
241 self.labels={"initialdir" : "Répertoire initial pour Open/Save des fichiers",
242 "rep_travail" : "Répertoire de travail",
243 "rep_mat" : "Répertoire materiaux",
244 "path_doc" : "Chemin d'accès à la doc Aster",
245 "exec_acrobat" : "Ligne de commande Acrobat Reader",
246 "catalogues" : "Versions du code ",
247 "isdeveloppeur" : "Niveau de message ",
248 "path_cata_dev" : "Chemin d'accès aux catalogues développeurs"}
250 if self.code == "OPENTURNS" :
251 self.labels["DTDDirectory"]="Chemin d'accès au wraper"
253 self.types ={"initialdir":"rep", "rep_travail":"rep","rep_mat":"rep",
254 "path_doc": "rep","exec_acrobat":"file","exec_acrobat":"file",
255 "catalogues" :"cata","isdeveloppeur":"YesNo","path_cata_dev":"rep",
256 "DTDDirectory":"rep"}
259 self.YesNo['isdeveloppeur']=('Deboggage','Utilisation')
262 self.rep_user = utils.get_rep_user()
263 self.initialdir=self.rep_user
264 self.rep_travail=os.path.join(self.rep_user,'uaster','tmp_eficas')
266 self.path_doc=self.rep_user
267 self.exec_acrobat=self.rep_user
268 self.catalogues= os.path.join(self.rep_ini,'..','Cata/cata.py')
269 self.isdeveloppeur='NON'
270 self.path_cata_dev=os.path.join(self.rep_user,'cata')
271 CONFIGbase.__init__ (self,appli)
274 #--------------------------------------
275 def save_params(self):
276 #--------------------------------------
278 # les nouveaux paramètres dans le fichier de configuration utilisateur
280 l_param=('exec_acrobat', 'rep_ini','catalogues','rep_travail','rep_mat','path_doc')
282 for clef in l_param :
283 if hasattr(self,clef):
284 valeur=getattr(self,clef)
285 texte= texte + clef+" = " + repr(valeur) +"\n"
288 # recuperation des repertoires materiaux
290 for item in self.catalogues :
292 (code,version,cata,format,defaut)=item
294 (code,version,cata,format)=item
295 codeSansPoint=re.sub("\.","",version)
296 chaine="rep_mat_"+codeSansPoint
297 if hasattr(self,chaine):
298 valeur=getattr(self,chaine)
299 texte= texte + chaine+" = '" + str(valeur) +"'\n"
303 f=open(self.fic_ini_utilisateur,'w+')
308 class CONFIGStyle(CONFIGbase):
309 def __init__(self,appli,rep_ini):
310 self.salome=appli.salome
311 self.texte = "Pour prendre en compte les modifications \n"+\
313 self.fichier="style.py"
314 self.rep_ini = rep_ini
315 self.fic_ini = os.path.join(self.rep_ini,self.fichier)
316 self.titre = "Paramètres d affichage"
317 self.texte_ini = "Voici les paramètres configurables : "
318 self.commande = self.creation_fichier_ini_si_possible
319 self.labels={"background":"couleur du fonds",
320 "foreground":"couleur de la police standard" ,
321 "standard":" police et taille standard",
322 "standard_italique":"police utilisée pour l'arbre ",
323 "standard_gras_souligne":"police utilisée pour le gras souligné",
324 "canvas_italique":"police italique",
325 "standard_gras":"gras",
327 #"canvas_gras":"police gras",
328 #"canvas_gras_italique":"police gras italique",
329 #"standard12":"police 12",
330 #"standard12_gras":"police 12 gras",
331 #"standard12_gras_italique":"police 12 gras italique",
332 #"standardcourier10":"courrier "
333 "statusfont":"police utilisée dans la status Bar",
335 self.types ={"background":"mot",
338 "standard_italique":"mot3",
339 "standard_gras":"mot3",
340 "standard_gras_souligne":"mot4",
342 "canvas_italique":"mot3",
343 "canvas_gras":"mot3",
344 "canvas_gras_italique":"mot4",
346 "standard12_gras":"mot3",
347 "standard12_gras_italique":"mot4",
349 "standardcourier10":"mot2"}
352 CONFIGbase.__init__ (self,appli)
355 def affichage_style_ini(self):
356 self.affichage_fichier_ini()
358 def make_config(appli,rep):
359 return CONFIG(appli,rep)
361 def make_config_style(appli,rep):
362 return CONFIGStyle(appli,rep)