]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/configuration.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / Editeur / configuration.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 import os, sys, string, types, re
26 import traceback
27
28 # Modules Eficas
29 from Editeur import utils
30
31 class CONFIGbase:
32
33   #-----------------------------------
34   def __init__(self,appli):
35   #-----------------------------------
36
37   # Classe de base permettant de lire, afficher
38   # et sauvegarder les fichiers utilisateurs editeur.ini
39   # et style.py
40   # Classe Mere de : class CONFIG(CONFIGbase)
41   #                  class CONFIGStyle(CONFIGbase):
42
43       self.appli = appli  
44       self.salome = appli.salome
45       self.dRepMat={}
46       if self.appli:
47          self.parent=appli.top
48       else:
49          self.parent=None
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()
55
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
66           sys.exit(0)
67       self.lecture_fichier(self.fic_ini)
68
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
77       d=locals()
78       try:
79          exec txt in d
80       except:
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
86          sys.exit()
87
88       for k in d.keys() :
89           if  k in self.labels.keys()  :
90              setattr(self,k,d[k])
91     # Glut horrible pour les repertoires materiau...
92           elif k[0:9]=="rep_mat_v" :
93              setattr(self,k,d[k])
94       
95       for k in d['style'].__dict__.keys() :
96           setattr(self,k,d['style'].__dict__[k])
97
98       if hasattr(self,"catalogues") :
99          for ligne in self.catalogues :
100             version=ligne[1]
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)
106
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):
113           return
114       self.lecture_fichier(self.fic_ini_utilisateur)
115
116   #--------------------------------------
117   def lecture_catalogues_standard(self):
118   #--------------------------------------
119       # repertoires Materiau
120       if hasattr(self,"catalogues") :
121          for ligne in self.catalogues :
122             version=ligne[1]
123             cata=ligne[2]
124             self.dRepMat[version]=os.path.join(cata,'materiau')
125
126   #--------------------------------------
127   def affichage_fichier_ini(self):
128   #--------------------------------------
129       """
130       Affichage des valeurs des paramètres relus par Eficas
131       """
132       import widgets
133       result = widgets.Formulaire(self.parent,
134                                   obj_pere = self,
135                                   titre = self.titre,
136                                   texte = self.texte_ini,
137                                   items = self.l_param,
138                                   mode='display',
139                                   commande=('Modifier',self.commande))
140       if result.resultat :
141           #print 'on sauvegarde les nouveaux paramètres :',result.resultat
142           self.save_param_ini(result.resultat)
143
144   #--------------------------------------
145   def save_param_ini(self,dico):
146   #--------------------------------------
147   # sauvegarde
148   # les nouveaux paramètres dans le fichier de configuration utilisateur
149   #
150       f=open(self.fic_ini_utilisateur,'w+')
151       for k,v in dico.items():
152          if self.types[k] in ('mot2','mot3','mot4'): 
153             v1=v[1:-1]
154             val=v1.split(",")
155             p = "(" 
156             listeval=""
157             for valeur in val:
158               listeval = listeval+ p + str(valeur) 
159               p=" , "
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')
164          else:
165             f.write(str(self.pref)+str(k) + '\t=\t"' + str(v) + '"\n')
166       f.close()
167       self.lecture_fichier_ini_utilisateur()
168
169   #-------------------------------------------
170   def creation_fichier_ini_si_possible(self):
171   #-------------------------------------------
172       return self.creation_fichier_ini(mode='ignorer_annuler')
173
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
178   # eficas.ini
179   #
180       import widgets
181       items = self.l_param
182       result = widgets.Formulaire(self.parent,
183                                   obj_pere = self,
184                                   titre = "Saisie des données indispensables à la configuration d'EFICAS",
185                                   texte = self.texte,
186                                   items = items,
187                                   mode='query')
188       if not result.resultat :
189           if mode == 'considerer_annuler':
190              test=0
191              if self.appli.ihm=="TK" :
192                 from widgets import showerror,askretrycancel
193                 test = askretrycancel("Erreur","Données incorrectes !")
194              if not test:
195                  # XXX On sort d'EFICAS, je suppose
196                  self.appli.exitEFICAS()
197              else:
198                  self.creation_fichier_ini()
199           else:
200               return None
201       else :
202           self.save_param_ini(result.resultat)
203           return result.resultat
204
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)
213
214       self.l_param=[]
215       for k in self.labels.keys()  :
216           if hasattr(self,k) :
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]))
220              else :
221                 self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k]))
222       self.l_param = tuple(self.l_param)
223
224
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
231       self.code=appli.code
232       if self.salome == 0 :
233          self.fichier="editeur.ini"
234       else :
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"}
249
250       if self.code == "OPENTURNS" :
251          self.labels["DTDDirectory"]="Chemin d'accès au wraper"
252                    
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"}
257
258       self.YesNo={}
259       self.YesNo['isdeveloppeur']=('Deboggage','Utilisation')
260
261       # Valeurs par defaut
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')
265       self.rep_mat=""
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)
272       self.pref=""
273
274   #--------------------------------------
275   def save_params(self):
276   #--------------------------------------
277   # sauvegarde
278   # les nouveaux paramètres dans le fichier de configuration utilisateur
279   #
280       l_param=('exec_acrobat', 'rep_ini','catalogues','rep_travail','rep_mat','path_doc')
281       texte=""
282       for clef in l_param :
283           if hasattr(self,clef):
284              valeur=getattr(self,clef)
285              texte= texte + clef+"      = " + repr(valeur) +"\n"
286
287
288       # recuperation des repertoires materiaux
289       try :
290           for item in self.catalogues :
291               try :
292                   (code,version,cata,format,defaut)=item
293               except :
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"
300       except :
301              pass
302
303       f=open(self.fic_ini_utilisateur,'w+')
304       f.write(texte) 
305       f.close()
306
307
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"+\
312                    "     RELANCER EFICAS"
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",
326                    #"canvas":"police",
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",
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