Salome HOME
fin du menage
[tools/eficas.git] / InterfaceQT4 / configuration.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021   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  Editeur.Eficas_utils import read_file
34 from Extensions.i18n import tr
35
36
37 class configBase(object):
38
39   #-------------------------------
40   def __init__(self,appliEficas,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
55       self.appliEficas   = appliEficas  
56       self.code    = appliEficas.code
57       self.salome  = appliEficas.salome
58       if self.salome : self.name="editeur_salome.ini"
59       else           : self.name="editeur.ini"
60       self.rep_mat = None
61       self.repIni  = repIni
62      
63       if self.code == None : self.code=''
64       #if sys.platform[0:5]=="linux" :
65               #self.rep_user   = os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
66       self.rep_user   = os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
67       #else :
68       #        self.rep_user   = os.path.join('C:/','.config/Eficas',self.code)
69
70
71       self.setValeursParDefaut()
72       
73       if self.code != '' :
74          self.lectureFichierIniStandard()
75          self.lectureFichierIniIntegrateur()
76          self.lectureFichierIniUtilisateur()
77
78       if self.boutonDsMenuBar:
79          self.closeAutreCommande = True
80          self.closeFrameRechercheCommande = True
81
82       #Particularite des schemas MAP
83       if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
84
85       #if self.appliEficas: self.parent=appliEficas.top
86       #else:         self.parent=None
87
88       if not os.path.isdir(self.savedir) :
89         if sys.platform[0:5]=="linux" :
90           #self.savedir=os.environ['HOME']
91           self.savedir=os.path.expanduser("~")
92         else:
93           self.savedir='C:/'
94       
95
96
97   def setValeursParDefaut(self):
98   #-----------------------------
99   
100       # Valeurs par defaut
101       if not os.path.isdir(self.rep_user) : os.makedirs(self.rep_user)
102       self.path_doc     = os.path.abspath(os.path.join(self.repIni,'..','Doc'))
103       self.exec_acrobat = 'acroread'
104       nomDir="Eficas_"+self.code
105       #if sys.platform[0:5]=="linux" :
106         #self.savedir   = os.path.abspath(os.path.join(os.environ['HOME'],nomDir))
107       self.savedir=os.path.join(os.path.expanduser("~"),'.config/Eficas',self.code)
108       #else:
109       #  self.savedir = os.path.abspath('C:/')
110       self.modeNouvCommande='initial'
111       self.affiche="alpha"
112       self.closeAutreCommande = False
113       self.closeFrameRechercheCommande = False
114       self.closeFrameRechercheCommandeSurPageDesCommandes = False
115       self.closeEntete = False
116       self.closeArbre = False
117       self.demandeLangue=False
118       self.suiteTelemac=False
119       self.nombreDeBoutonParLigne=0
120       self.translatorFichier=None
121       self.dicoImages= {}
122       self.dicoIcones= {}
123       self.afficheCommandesPliees = True
124       self.afficheFirstPlies =  False
125       self.simpleClic = False
126       self.afficheOptionnelVide=False
127       self.afficheListesPliees=True
128       self.boutonDsMenuBar=False
129       self.ficIcones=None
130       self.repIcones=None
131       self.differencieSiDefaut=False
132       self.typeDeCata='Python'
133       self.closeParenthese=False
134       self.closeOptionnel=False
135       self.afficheFactOptionnel=False
136       self.enleverActionStructures=False
137       self.enleverPoubellePourCommande=False
138       self.enleverParametres=False
139       self.enleverSupprimer=False
140       self.ajoutExecution=False
141       self.utilParExtensions=[]
142       self.rendVisiblesLesCaches=False
143       self.pasDeMCOptionnels=False
144
145       self.dumpXSD=False
146       self.withXSD=False
147       self.afficheIhm=True
148
149
150
151  
152   #--------------------------------------
153   def lectureFichierIniStandard(self):
154   #--------------------------------------
155
156       name='prefs_'+self.appliEficas.code
157       try :
158         prefsCode=__import__(name)
159       except :
160         self.catalogues=[]
161         print ('pas de fichier de prefs')
162         return
163       for k in dir(prefsCode):
164           if (k[0:1] != "__" and k[-1:-2] !='__'):
165              valeur=getattr(prefsCode,k)
166              setattr(self,k,valeur)
167        
168
169
170   #--------------------------------------
171   def lectureFichierIniIntegrateur(self):
172   #--------------------------------------
173   # Verifie l'existence du fichier "standard"
174   # appelle la lecture de ce fichier
175       clef="PREFS_CATA_"+self.code
176       try :
177         repIntegrateur=os.path.abspath(os.environ[clef])
178       except :
179         return
180       
181       fic_ini_integrateur=os.path.join(repIntegrateur,self.name)
182       if not os.path.isfile(fic_ini_integrateur): return
183       txt = read_file(fic_ini_integrateur)
184       d=locals()
185       try:
186          exec(txt, d)
187       except :
188          try :
189            from PyQt5.QtWidgets import QMessageBox
190            QMessageBox.critical( None, tr("Import du fichier de Configuration"), 
191                         tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
192          except : 
193            print("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur))
194          return
195       self.labels_eficas.append('rep_aide')
196       for k in self.labels_eficas :
197          try :
198             setattr(self,k,d[k])
199          except :
200             pass
201       #Glut pour les repertoires materiaux
202       #et pour la doc
203       for k in d :
204           if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
205              setattr(self,k,d[k])
206
207
208   #--------------------------------------
209   def lectureFichierIniUtilisateur(self):
210   #--------------------------------------
211   # Surcharge les parametres standards par les parametres utilisateur s'ils existent
212       self.fic_ini_utilisateur = os.path.join(self.rep_user,self.name)
213       if not os.path.isfile(self.fic_ini_utilisateur): return
214
215       txt = read_file(self.fic_ini_utilisateur)
216       d=locals()
217       try:
218          exec(txt, d)
219       except :
220          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
221          try :
222            from PyQt5.QtWidgets import QMessageBox
223            QMessageBox.critical( None, tr("Import du fichier de Configuration"), 
224                         tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
225          except :
226             print ("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur))
227       for k in self.labels_user :
228          try :
229             setattr(self,k,d[k])
230          except :
231             pass
232       for k in d :
233           if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
234              setattr(self,k,d[k])
235
236   #--------------------------------------
237   def saveParams(self):
238   #--------------------------------------
239   # sauvegarde
240   # les nouveaux parametres dans le fichier de configuration utilisateur
241   #
242       texte=""
243       for clef in self.labels_user :
244           if hasattr(self,clef):
245              valeur=getattr(self,clef)
246              texte= texte + clef+"      = " + repr(valeur) +"\n"
247       #Glut pour les repertoires materiaux
248       #et pour la doc
249       for k in dir(self):
250           if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
251              valeur=getattr(self,k)
252              texte= texte + k+" = " + repr(valeur) +"\n"
253
254       f=open(self.fic_ini_utilisateur,'w+')
255       f.write(texte) 
256       f.close()
257 #
258
259
260 def makeConfig(appliEficas,rep):
261     return configBase(appliEficas,rep)