1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 from Extensions.i18n import tr
23 from determine import monEnvQT5
25 from PyQt5.QtWidgets import QFileDialog, QMessageBox
26 from PyQt5.QtCore import QFileInfo
28 from PyQt4.QtGui import *
29 from PyQt4.QtCore import *
31 DictExtensions= {"MAP" : ".map"}
34 def __init__(self,appliEficas):
35 self.appliEficas=appliEficas
38 self.appliEficas=appliEficas
41 self.untitledCount = 0
44 self.myQtab = self.appliEficas.myQtab
47 self.myQtab.currentChanged.connect(self.indexChanged)
48 self.myQtab.tabCloseRequested.connect(self.closeTab)
50 self.myQtab.connect(self.myQtab, SIGNAL('tabCloseRequested(int)'), self.closeTab)
51 if self.appliEficas.multi== True:
52 self.myQtab.connect(self.myQtab,SIGNAL("currentChanged(int)"),self.indexChanged)
54 def indexChanged(self):
55 index=self.myQtab.currentIndex()
56 if self.dict_editors.has_key(index):
57 editor=self.dict_editors[index]
58 self.appliEficas.CONFIGURATION=editor.CONFIGURATION
59 self.appliEficas.code=editor.CONFIGURATION.code
60 self.appliEficas.setWindowTitle(editor.titre)
61 self.appliEficas.construitMenu()
63 def handleOpen(self,fichier=None,patron=0,units=None):
66 if self.appliEficas.demande==True :
67 self.appliEficas.definitCode(None,None)
68 if self.appliEficas.code == None:return
70 if DictExtensions.has_key(self.appliEficas.code) :
71 chaine="JDC (*"+DictExtensions[self.appliEficas.code]+");;"
72 extensions=tr(chaine+ "All Files (*)")
74 extensions=tr('Fichiers JDC (*.comm);;''Tous les Fichiers (*)')
76 fichier = QFileDialog.getOpenFileName(self.appliEficas,
78 self.appliEficas.CONFIGURATION.savedir,
80 if monEnvQT5 : fichier=fichier[0]
81 if not fichier: return result
82 fichier = os.path.abspath(unicode(fichier))
83 ulfile = os.path.abspath(unicode(fichier))
84 self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
85 self.appliEficas.addToRecentList(fichier)
86 maPage=self.getEditor( fichier,units=units)
87 if maPage: result = maPage
88 if maPage : self.myQtab.setTabText(self.myQtab.indexOf(maPage),os.path.basename(fichier))
94 def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter')):
95 if doitSauverRecent : self.appliEficas.sauveRecents()
96 index=self.myQtab.currentIndex()
98 res=self.checkDirty(self.dict_editors[index],texte)
99 if res == 2 : return 2 # l utilisateur a annule
100 index=self.myQtab.currentIndex()
102 while idx < len(self.dict_editors) -1 :
103 self.dict_editors[idx]=self.dict_editors[idx+1]
105 del self.dict_editors[len (self.dict_editors) -1]
107 del self.doubles[self.dict_editors[index]]
110 self.myQtab.removeTab(index)
115 index=self.myQtab.currentIndex()
116 if index < 0 : return
117 editor=self.dict_editors[index]
121 index=self.myQtab.currentIndex()
122 if index < 0 : return
123 editor=self.dict_editors[index]
126 def handleCloseAll(self,texte=tr('Quitter')):
128 self.appliEficas.sauveRecents()
129 while len(self.dict_editors) > 0 :
130 self.myQtab.setCurrentIndex(0)
131 res=self.handleClose(0,texte)
132 if res==2 : return res # l utilsateur a annule
135 def handleRechercher(self):
136 #print "passage dans handleRechercher"
137 index=self.myQtab.currentIndex()
138 if index < 0 : return
139 editor=self.dict_editors[index]
140 editor.handleRechercher()
142 def handleRechercherDsCatalogue(self):
143 #print "passage dans handleRechercher"
144 index=self.myQtab.currentIndex()
145 if index < 0 : return
146 editor=self.dict_editors[index]
147 editor.handleRechercherDsCatalogue()
149 def handleDeplier(self):
150 index=self.myQtab.currentIndex()
151 if index < 0 : return
152 editor=self.dict_editors[index]
153 editor.handleDeplier()
155 def handleEditCopy(self):
156 #print "passage dans handleEditCopy"
157 index=self.myQtab.currentIndex()
158 if index < 0 : return
159 editor=self.dict_editors[index]
160 editor.handleEditCopy()
162 def handleEditCut(self):
163 #print "passage dans handleEditCut"
164 index=self.myQtab.currentIndex()
165 if index < 0 : return
166 editor=self.dict_editors[index]
167 editor.handleEditCut()
169 def handleEditPaste(self):
170 #print "passage dans handleEditPaste"
171 index=self.myQtab.currentIndex()
172 if index < 0 : return
173 editor=self.dict_editors[index]
174 editor.handleEditPaste()
176 def handleSupprimer(self):
177 index=self.myQtab.currentIndex()
178 if index < 0 : return
179 editor=self.dict_editors[index]
180 editor.handleSupprimer()
182 def newEditor(self,include=0):
183 if self.appliEficas.demande==True :
184 self.appliEficas.definitCode(None,None)
185 if self.appliEficas.code == None:return
186 maPage=self.getEditor(include=include)
188 def newIncludeEditor(self):
189 self.newEditor(include=1)
191 def handleViewJdcFichierSource(self):
192 index=self.myQtab.currentIndex()
193 if index < 0 : return
194 self.dict_editors[index].viewJdcSource()
196 def handleViewJdcRegles(self):
197 index=self.myQtab.currentIndex()
198 if index < 0 : return
199 self.dict_editors[index].viewJdcRegles()
201 def handlegestionParam(self):
202 index=self.myQtab.currentIndex()
204 QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees"))
206 self.dict_editors[index].gestionParam()
208 def handleViewJdcRapport(self):
209 index=self.myQtab.currentIndex()
210 if index < 0 : return
211 self.dict_editors[index].viewJdcRapport()
213 def handleViewJdcPy(self):
214 index=self.myQtab.currentIndex()
215 if index < 0 : return
216 self.dict_editors[index].viewJdcPy()
218 def saveCurrentEditor(self):
219 index=self.myQtab.currentIndex()
220 if index < 0 : return
221 editor=self.dict_editors[index]
222 if editor in self.doubles.keys() :
225 tr("Fichier Duplique"),
226 tr("Le fichier ne sera pas sauvegarde."),)
228 ok, newName = editor.saveFile()
230 fileName=os.path.basename(unicode(newName))
231 self.myQtab.setTabText(index,fileName)
234 def saveLegerCurrentEditor(self):
235 index=self.myQtab.currentIndex()
236 if index < 0 : return
237 editor=self.dict_editors[index]
238 ok, newName = editor.saveFileLeger()
241 def sauveLigneCurrentEditor(self):
242 index=self.myQtab.currentIndex()
243 if index < 0 : return
244 editor=self.dict_editors[index]
245 if editor in self.doubles.keys() :
248 tr("Fichier Duplique"),
249 tr("Le fichier ne sera pas sauvegarde."),)
251 ok, newName = editor.sauveLigneFile()
253 fileName=os.path.basename(unicode(newName))
254 self.myQtab.setTabText(index,fileName)
258 def saveAsCurrentEditor(self):
259 index=self.myQtab.currentIndex()
260 editor=self.dict_editors[index]
261 oldName=editor.fichier
262 ok,newName = editor.saveFileAs()
264 fileName=os.path.basename(unicode(newName))
265 self.myQtab.setTabText(index,fileName)
266 if editor in self.doubles.keys():
267 if oldName != newName :
268 del self.doubles[editor]
271 def displayJDC(self,jdc,fn=None):
273 Public slot to display a file in an editor.
274 @param fn name of file to be opened
275 # insert filename into list of recently opened files
278 if fn != None : titre=fn.split("/")[-1]
279 editor = self.getEditor(fichier= fn, jdc = jdc ,include=1)
280 self.appliEficas.addToRecentList(editor.getFileName())
282 def getEditor(self,fichier = None,jdc = None, units = None,include=0):
286 for indexEditor in self.dict_editors.keys():
287 editor=self.dict_editors[indexEditor]
288 if self.samepath(fichier, editor.getFileName()):
290 msgBox = QMessageBox()
291 msgBox.setWindowTitle(tr("Fichier"))
292 msgBox.setText(tr("Le fichier <b>%s</b> est deja ouvert", str(fichier)))
293 msgBox.addButton(tr("&Duplication"),0)
294 msgBox.addButton(tr("&Abandonner"),1)
297 abort = QMessageBox.warning(self.appliEficas,
299 tr("Le fichier <b>%s</b> est deja ouvert.",str(fichier)),
305 from editor import JDCEditor
306 editor = JDCEditor(self.appliEficas,fichier, jdc, self.myQtab,units=units,vm = self,include=include)
309 self.doubles[editor]=double
310 if editor.jdc: # le fichier est bien un jdc
311 self.editors.append(editor)
317 self.addView(editor, fichier)
319 self.myQtab.setCurrentIndex(indexEditor)
321 index=self.myQtab.currentIndex()
323 self.dict_editors[index]=editor
326 def addView(self, win, fichier=None):
327 #PNPNPNPN --> a affiner
329 self.untitledCount += 1
330 self.myQtab.addTab(win, tr("Fichier non encore nomme ", self.untitledCount))
331 #self.myQtab.addTab(win, str(self.appliEficas.code))
333 liste=fichier.split('/')
335 if not QFileInfo(fichier).isWritable():
336 txt = '%s (ro)' % txt
337 self.myQtab.addTab(win,txt )
338 self.myQtab.setCurrentWidget(win)
339 self.currentEditor=win
342 def getOpenStartDir(self) :
343 #PN --> Les Preferences
345 userDir=os.path.expanduser("~/Eficas_install/")
350 def samepath(self,f1, f2):
354 if f1 is None or f2 is None: return 0
355 if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1
359 def checkDirty(self, editor,texte):
361 Private method to check dirty status and open a message window.
363 @param editor editor window to check
364 @return flag indicating successful reset of the dirty flag (boolean)
367 if (editor.modified) and (editor in self.doubles.keys()) :
369 msgBox = QMessageBox(None)
370 msgBox.setWindowTitle(tr("Fichier Duplique"))
371 msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
372 msgBox.addButton(texte,0)
373 msgBox.addButton(tr("&Annuler"),1)
376 res = QMessageBox.warning(
378 tr("Fichier Duplique"),
379 tr("Le fichier ne sera pas sauvegarde."),
382 if res == 0 : return 1
385 fn = editor.getFileName()
386 if fn is None: fn = tr('Noname')
388 msgBox = QMessageBox(None)
389 msgBox.setWindowTitle(tr("Fichier Modifie"))
390 msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
391 msgBox.addButton(tr("&Sauvegarder"),1)
392 msgBox.addButton(tr("&Quitter sans sauvegarder"),0)
395 res = QMessageBox.warning(self.appliEficas,
396 tr("Fichier Modifie"),
397 tr("Le fichier %s n a pas ete sauvegarde.",str(fn)),
400 tr("&Quitter sans sauvegarder") )
401 if res == 2 : res = 1
403 (ok, newName) = editor.saveFile()
405 fileName=os.path.basename(unicode(newName))
406 index=self.myQtab.currentIndex()
407 self.myQtab.setTabText(index,fileName)
411 def handleAjoutGroup(self,listeGroup):
412 index=self.myQtab.currentIndex()
413 if index < 0 : return
414 editor=self.dict_editors[index]
415 editor.handleAjoutGroup(listeGroup)