Salome HOME
*** empty log message ***
[tools/eficas.git] / InterfaceQT4 / qtEficas.py
1 # -*- coding: iso-8859-1 -*-
2
3 import os, sys
4
5 from PyQt4.QtGui  import *
6 from PyQt4.QtCore import *
7 from PyQt4.QtAssistant import *
8 from myMain import Ui_Eficas
9 from viewManager import MyTabview
10
11 from Editeur import session
12
13
14 class Appli(Ui_Eficas,QMainWindow):    
15     """
16     Class implementing the main user interface.
17     """
18     def __init__(self,code="ASTER",salome=0,parent=None):
19         """
20         Constructor
21         """
22         self.ihm="QT"
23         self.code=code
24         self.salome=salome
25         self.format_fichier="python"    #par defaut
26         self.top = self #(pour CONFIGURATION)
27         self.QWParent=None #(Pour lancement sans IHM)
28
29         import prefs
30         if salome :
31            import sys
32         prefs.code=code
33         name='prefs_'+prefs.code
34         prefsCode=__import__(name)
35         nameConf='configuration_'+prefs.code
36         configuration=__import__(nameConf)
37
38         self.REPINI=prefsCode.REPINI
39         self.RepIcon=prefsCode.INSTALLDIR+"/Editeur/icons"
40         self.CONFIGURATION = configuration.make_config(self,prefsCode.REPINI)
41         self.CONFIGStyle = configuration.make_config_style(self,prefsCode.REPINI)
42         if hasattr(prefsCode,'encoding'):
43            import sys
44            reload(sys)
45            sys.setdefaultencoding(prefsCode.encoding)
46
47         QMainWindow.__init__(self)
48         Ui_Eficas.__init__(self)
49         self.setupUi(self)
50         self.ajoutIcones()
51         self.viewmanager = MyTabview(self) 
52         self.recentMenu=self.menuFichier.addMenu(self.trUtf8('&Recents'))
53         self.connecterSignaux() 
54
55
56         #self.monAssistant=QAssistantClient(QString(""), self.viewmanager)
57         #if self.salome :
58         #   from Editeur import session
59         #   self.ouvreFichiers()
60
61         self.recent =  QStringList()
62         self.ficPatrons={}
63         self.initPatrons()
64         self.ficRecents={}
65         self.initRecents()
66
67         self.ouvreFichiers()
68         
69     def OPENTURNS(self) :
70         self.MenuBar.removeItem(5)
71         self.MenuBar.removeItem(6)
72         self.MenuBar.removeItem(7)
73
74     def ajoutIcones(self) :
75         # Pour pallier les soucis de repertoire d icone
76         icon = QIcon(self.RepIcon+"/New24.png")
77         self.action_Nouveau.setIcon(icon)
78         icon1 = QIcon(self.RepIcon+"/Open24.png")
79         self.action_Ouvrir.setIcon(icon1)
80         icon2 = QIcon(self.RepIcon+"/Save24.png")
81         self.actionEnregistrer.setIcon(icon2)
82         icon3 = QIcon(self.RepIcon+"/Cut24.png")
83         self.actionCouper.setIcon(icon3)
84         icon4 = QIcon(self.RepIcon+"/Copy24.png")
85         self.actionCopier.setIcon(icon4)
86         icon5 = QIcon(self.RepIcon+"/Paste24.png")
87         self.actionColler.setIcon(icon5)
88
89
90     def connecterSignaux(self) :
91         self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
92
93         self.connect(self.action_Nouveau,SIGNAL("activated()"),self.fileNew)
94         self.connect(self.actionNouvel_Include,SIGNAL("activated()"),self.NewInclude)
95         self.connect(self.action_Ouvrir,SIGNAL("activated()"),self.fileOpen)
96         self.connect(self.actionEnregistrer,SIGNAL("activated()"),self.fileSave)
97         self.connect(self.actionEnregistrer_sous,SIGNAL("activated()"),self.fileSaveAs)
98         self.connect(self.actionFermer,SIGNAL("activated()"),self.fileClose)
99         self.connect(self.actionFermer_tout,SIGNAL("activated()"),self.fileCloseAll)
100         self.connect(self.actionQuitter,SIGNAL("activated()"),self.fileExit)
101
102         self.connect(self.actionCouper,SIGNAL("activated()"),self.editCut)
103         self.connect(self.actionCopier,SIGNAL("activated()"),self.editCopy)
104         self.connect(self.actionColler,SIGNAL("activated()"),self.editPaste)
105
106         self.connect(self.actionRapport_de_Validation,SIGNAL("activated()"),self.jdcRapport)
107         self.connect(self.actionFichier_Source,SIGNAL("activated()"),self.jdcFichierSource)
108         self.connect(self.actionFichier_Resultat,SIGNAL("activated()"),self.visuJdcPy)
109
110         self.connect(self.actionParametres_Eficas,SIGNAL("activated()"),self.optionEditeur)
111         self.connect(self.actionLecteur_Pdf,SIGNAL("activated()"),self.optionPdf)
112
113         self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8)
114         self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9)
115
116         #self.connect(self.helpIndexAction,SIGNAL("activated()"),self.helpIndex)
117         #self.connect(self.helpContentsAction,SIGNAL("activated()"),self.helpContents)
118         #self.connect(self.helpAboutAction,SIGNAL("activated()"),self.helpAbout)
119         #self.connect(self.aidenew_itemAction,SIGNAL("activated()"),self.helpAbout)
120                              
121
122     def ouvreFichiers(self) :
123     # Ouverture des fichiers de commandes donnes sur la ligne de commande
124         cwd=os.getcwd()
125         self.dir=cwd
126         for study in session.d_env.studies:
127             os.chdir(cwd)
128             d=session.get_unit(study,self)
129             self.viewmanager.handleOpen(fichier=study["comm"],units=d)
130
131     def  get_source(self,file):
132     # appele par Editeur/session.py
133         import convert
134         p=convert.plugins['python']()
135         p.readfile(file)
136         texte=p.convert('execnoparseur')
137         return texte
138
139
140         
141     def initPatrons(self) :
142     # Mise à jour du menu des fichiers recemment ouverts
143         from Editeur import listePatrons
144         self.listePatrons = listePatrons.listePatrons(self.code)
145         idx = 0
146         for nomSsMenu in self.listePatrons.liste.keys():
147             ssmenu=self.menuPatrons.addMenu(nomSsMenu)
148             for fichier in self.listePatrons.liste[nomSsMenu]:
149                id = ssmenu.addAction(fichier)
150                self.ficPatrons[id]=fichier
151                self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
152             #   self.Patrons.setItemParameter(id,idx)
153                idx=idx+1
154
155     def initRecents(self):
156        try :
157            rep=self.CONFIGURATION.rep_user
158            monFichier=rep+"/listefichiers_"+self.code
159            index=0
160            f=open(monFichier)
161            while ( index < 9) :
162               ligne=f.readline()
163               if ligne != "" :
164                  l=(ligne.split("\n"))[0]
165                  self.recent.append(l)
166               index=index+1
167        except :
168            pass
169
170        try    : f.close()
171        except : pass
172
173     def addToRecentList(self, fn):
174         """
175         Public slot to add a filename to the list of recently opened files.
176
177         @param fn name of the file to be added
178         """
179         self.recent.removeAll(fn)
180         self.recent.prepend(fn)
181         if len(self.recent) > 9:
182             self.recent = self.recent[:9]
183
184     def sauveRecents(self) :
185        rep=self.CONFIGURATION.rep_user
186        monFichier=rep+"/listefichiers_"+self.code
187        try :
188             f=open(monFichier,'w')
189             if len(self.recent) == 0 : return
190             index=0
191             while ( index <  len(self.recent)):
192               ligne=str(self.recent[index])+"\n"
193               f.write(ligne)
194               index=index+1
195        except :
196             pass
197        try :
198             f.close()
199        except :
200             pass
201
202
203
204     def traductionV7V8(self):
205         from gereTraduction import traduction
206         traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V7V8")
207
208     def traductionV8V9(self):
209         from gereTraduction import traduction
210         traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V8V9")
211
212     def version(self) :
213         from desVisu import DVisu
214         titre = "version "
215         monVisu=DVisu(parent=self.viewmanager)
216         monVisu.setCaption(titre)
217         monVisu.TB.setText("Eficas V1.13")
218         monVisu.adjustSize()
219         monVisu.show()
220
221     def aidePPal(self) :
222         maD=INSTALLDIR+"/AIDE/fichiers"
223         docsPath = QDir(maD).absPath()
224         self.monAssistant.showPage( QString("%1/index.html").arg(docsPath) )
225
226     def optionEditeur(self) :
227         from monOptionsEditeur import Options
228         monOption=Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
229         monOption.show()
230         
231     def optionPdf(self) :
232         from monOptionsPdf import OptionPdf
233         monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
234         monOption.show()
235         
236     def handleShowRecentMenu(self):
237         """
238         Private method to set up recent files menu.
239         """
240         self.recentMenu.clear()
241         
242         for rp in self.recent:
243             id = self.recentMenu.addAction(rp)
244             self.ficRecents[id]=rp
245             self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
246         self.recentMenu.addSeparator()
247         self.recentMenu.addAction(self.trUtf8('&Clear'), self.handleClearRecent)
248         
249     def handleOpenPatrons(self):
250         idx=self.sender()
251         fichier=self.REPINI+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
252         self.viewmanager.handleOpen(fichier=fichier, patron = 1)
253
254     def handleOpenRecent(self):
255         idx=self.sender()
256         fichier=self.ficRecents[idx]
257         self.viewmanager.handleOpen(fichier=fichier, patron =0 )
258         
259     def handleClearRecent(self):
260         self.recent = QStringList()
261         
262     def fileNew(self):        
263         self.viewmanager.newEditor()        
264         
265     def fileOpen(self ):
266         self.viewmanager.handleOpen()        
267         
268     def fileSave(self):
269         self.viewmanager.saveCurrentEditor()
270         
271     def fileSaveAs(self):
272         self.viewmanager.saveAsCurrentEditor()
273         
274     def fileClose(self):
275         self.viewmanager.handleClose()
276         
277     def fileCloseAll(self):
278         self.viewmanager.handleCloseAll()
279         
280     def fileExit(self):
281         # On peut sortir sur Abort
282         self.viewmanager.handleCloseAll()
283         if self.salome :
284            self.close()
285         else :
286            qApp.closeAllWindows()
287         
288     def editCopy(self):
289         self.viewmanager.handleEditCopy()
290       
291     def editCut(self):
292         self.viewmanager.handleEditCut()
293     
294     def editPaste(self):
295         self.viewmanager.handleEditPaste()
296         
297     def jdcFichierSource(self):
298         self.viewmanager.handleViewJdcFichierSource()
299         
300     def jdcRapport(self):
301         self.viewmanager.handleViewJdcRapport()
302         
303     def visuJdcPy(self):
304         self.viewmanager.handleViewJdcPy()
305
306     def helpAbout(self):
307         import AIDE
308         AIDE.go3(parent=self)
309
310     def NewInclude(self):
311         self.viewmanager.newIncludeEditor()
312
313
314 if __name__=='__main__':
315
316     # Modules Eficas
317     sys.path.append(INSTALLDIR+"/Aster")
318     from Aster import prefsCode
319     if hasattr(prefsCode,'encoding'):
320        # Hack pour changer le codage par defaut des strings
321        import sys
322        reload(sys)
323        sys.setdefaultencoding(prefsCode.encoding)
324        del sys.setdefaultencoding
325        # Fin hack
326
327     from Editeur import import_code
328     from Editeur import session
329
330     # Analyse des arguments de la ligne de commande
331     options=session.parse(sys.argv)
332     code=options.code
333
334
335     app = QApplication(sys.argv)
336     #app.setMainWidget(mw) (qt3)
337     Eficas=Appli()
338     Eficas.show()
339
340     #app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
341     #mw.ouvreFichiers()
342     #mw.show()
343
344     res=app.exec_()
345     sys.exit(res)