Salome HOME
optim eciture
[tools/eficas.git] / InterfaceQT4 / configuration.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """
21     Ce module sert pour charger les parametres de configuration d'EFICAS
22 """
23 # Modules Python
24 from __future__ import absolute_import
25 try :
26    from builtins import str
27    from builtins import range
28    from builtins import object
29 except : pass
30
31 import os, sys,  types, re
32 import traceback
33 from PyQt5.QtWidgets import QMessageBox
34 from  Editeur.utils import read_file
35 from Extensions.i18n import tr
36
37 class CONFIG_BASE(object):
38
39   #-------------------------------
40   def __init__(self,appli,repIni):
41   #-------------------------------
42
43   # Classe de base permettant de lire, afficher
44   # et sauvegarder les fichiers utilisateurs 
45   # On a deux directories : la directory generale (Repertoire d install + Nom du code
46   #                       Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper
47   # et la directorie de l utilisateur 
48   #                       HOME/.Eficas_Openturns
49   # Le fichier prefs.py va etre lu dans la directory generale 
50   #         puis surcharge eventuellement par celui contenu dans ${PREFS_CATA_$CODE} 
51   #         par celui de l utilisateur
52   # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
53   # dans le fichier general sinon
54       self.appli   = appli  
55       self.code    = appli.code
56       self.salome  = appli.salome
57       if self.salome : self.name="editeur_salome.ini"
58       else           : self.name="editeur.ini"
59       self.rep_mat = None
60       self.repIni  = repIni
61       if sys.platform[0:5]=="linux" :
62               self.rep_user   = os.path.join(os.environ['HOME'],'.config/Eficas',appli.code)
63       else :
64               self.rep_user   = os.path.join('C:/','.config/Eficas',appli.code)
65
66      
67
68       self.setValeursParDefaut()
69       
70       self.lecture_fichier_ini_standard()
71       self.lecture_fichier_ini_integrateur()
72       self.lecture_fichier_ini_utilisateur()
73
74       #Particularite des schemas MAP
75       if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
76
77       if self.appli: self.parent=appli.top
78       else:          self.parent=None
79
80       if not os.path.isdir(self.savedir) :
81         if sys.platform[0:5]=="linux" :
82           self.savedir=os.environ['HOME']
83         else:
84           self.savedir='C:/'
85       
86
87
88   def setValeursParDefaut(self):
89   #-----------------------------
90   
91       # Valeurs par defaut
92       if not os.path.isdir(self.rep_user) : os.makedirs(self.rep_user)
93       self.path_doc     = os.path.abspath(os.path.join(self.repIni,'..','Doc'))
94       self.exec_acrobat = 'acroread'
95       nomDir="Eficas_"+self.code
96       if sys.platform[0:5]=="linux" :
97         self.savedir   = os.path.abspath(os.path.join(os.environ['HOME'],nomDir))
98       else:
99         self.savedir = os.path.abspath('C:/')
100       self.mode_nouv_commande='initial'
101       self.affiche="alpha"
102       self.closeAutreCommande = False
103       self.closeFrameRechercheCommande = False
104       self.closeEntete = False
105       self.closeArbre = False
106       self.force_langue=False
107       self.suiteTelemac=False
108       self.nombreDeBoutonParLigne=0
109       self.translatorFichier=None
110       self.dicoImages= {}
111       self.simpleClic= False
112       self.afficheOptionnelVide=False
113
114  
115   #--------------------------------------
116   def lecture_fichier_ini_standard(self):
117   #--------------------------------------
118
119       name='prefs_'+self.appli.code
120       prefsCode=__import__(name)
121       for k in dir(prefsCode):
122           if (k[0:1] != "__" and k[-1:-2] !='__'):
123              valeur=getattr(prefsCode,k)
124              setattr(self,k,valeur)
125        
126
127
128   #--------------------------------------
129   def lecture_fichier_ini_integrateur(self):
130   #--------------------------------------
131   # Verifie l'existence du fichier "standard"
132   # appelle la lecture de ce fichier
133       clef="PREFS_CATA_"+self.code
134       try :
135         repIntegrateur=os.path.abspath(os.environ[clef])
136       except :
137         return
138       
139       fic_ini_integrateur=os.path.join(repIntegrateur,self.name)
140       if not os.path.isfile(fic_ini_integrateur): return
141       txt = read_file(fic_ini_integrateur)
142       d=locals()
143       try:
144          exec(txt, d)
145       except :
146          QMessageBox.critical( None, tr("Import du fichier de Configuration"), 
147                         tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
148          return
149       self.labels_eficas.append('rep_aide')
150       for k in self.labels_eficas :
151          try :
152             setattr(self,k,d[k])
153          except :
154             pass
155       #Glut pour les repertoires materiaux
156       #et pour la doc
157       for k in d :
158           if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
159              setattr(self,k,d[k])
160
161
162   #--------------------------------------
163   def lecture_fichier_ini_utilisateur(self):
164   #--------------------------------------
165   # Surcharge les parametres standards par les parametres utilisateur s'ils existent
166       self.fic_ini_utilisateur = os.path.join(self.rep_user,self.name)
167       if not os.path.isfile(self.fic_ini_utilisateur): return
168
169       txt = read_file(self.fic_ini_utilisateur)
170       d=locals()
171       try:
172          exec(txt, d)
173       except :
174          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
175          QMessageBox.critical( None, tr("Import du fichier de Configuration"), 
176                         tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
177       for k in self.labels_user :
178          try :
179             setattr(self,k,d[k])
180          except :
181             pass
182       for k in d :
183           if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
184              setattr(self,k,d[k])
185
186   #--------------------------------------
187   def save_params(self):
188   #--------------------------------------
189   # sauvegarde
190   # les nouveaux parametres dans le fichier de configuration utilisateur
191   #
192       texte=""
193       for clef in self.labels_user :
194           if hasattr(self,clef):
195              valeur=getattr(self,clef)
196              texte= texte + clef+"      = " + repr(valeur) +"\n"
197       #Glut pour les repertoires materiaux
198       #et pour la doc
199       for k in dir(self):
200           if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
201              valeur=getattr(self,k)
202              texte= texte + k+" = " + repr(valeur) +"\n"
203
204       f=open(self.fic_ini_utilisateur,'w+')
205       f.write(texte) 
206       f.close()
207 #
208