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