X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=InterfaceQT4%2FviewManager.py;h=fffd16d868e12f397e5268056f465a38598a1cb5;hb=8b202e4a0e933f400731a984944bf84aa9a06f48;hp=0050a29420b4c98d9e33917b41e46e17a66d8467;hpb=f69bed46fb8e1be3dbb939f3ba24cf7c9d5bec9c;p=tools%2Feficas.git diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py index 0050a294..fffd16d8 100644 --- a/InterfaceQT4/viewManager.py +++ b/InterfaceQT4/viewManager.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (C) 2007-2017 EDF R&D +# Copyright (C) 2007-2021 EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -20,275 +20,277 @@ from __future__ import absolute_import try : - from builtins import str - from builtins import object + from builtins import str + from builtins import object except : pass import os from Extensions.i18n import tr -import six from PyQt5.QtWidgets import QFileDialog, QMessageBox from PyQt5.QtCore import QFileInfo DictExtensions= {"MAP" : ".map"} class MyViewManager(object): - def __init__(self,appliEficas): - self.appliEficas=appliEficas - self.tabWidgets = [] - self.mesIndexes = {} - self.appliEficas=appliEficas - self.editors = [] - self.dict_editors={} - self.untitledCount = 0 - self.doubles = {} - - self.myQtab = self.appliEficas.myQtab - - self.myQtab.currentChanged.connect(self.indexChanged) - self.myQtab.tabCloseRequested.connect(self.closeTab) - - def indexChanged(self): - index=self.myQtab.currentIndex() - if index in self.dict_editors: - editor=self.dict_editors[index] - self.appliEficas.maConfiguration=editor.maConfiguration - self.appliEficas.code=editor.maConfiguration.code - self.appliEficas.setWindowTitle(editor.titre) - self.appliEficas.construitMenu() - - def handleOpen(self,fichier=None,patron=0,units=None): - result = None - if fichier is None: - if self.appliEficas.demande==True : - self.appliEficas.definitCode(None,None) - if self.appliEficas.code == None:return - + def __init__(self,appliEficas): + self.appliEficas=appliEficas + self.tabWidgets = [] + self.mesIndexes = {} + self.appliEficas=appliEficas + self.editors = [] + self.dictEditors={} + self.untitledCount = 0 + self.doubles = {} + + self.myQtab = self.appliEficas.myQtab + + self.myQtab.currentChanged.connect(self.indexChanged) + self.myQtab.tabCloseRequested.connect(self.closeTab) + + def indexChanged(self): + index=self.myQtab.currentIndex() + if index in self.dictEditors: + editor=self.dictEditors[index] + if editor.jdc !=None : + CONTEXT.unsetCurrentJdC() + CONTEXT.setCurrentJdC(editor.jdc) + self.appliEficas.maConfiguration=editor.maConfiguration + self.appliEficas.code=editor.maConfiguration.code + self.appliEficas.setWindowTitle(editor.titre) + self.appliEficas.construitMenu() + + def handleOpen(self,fichier=None,patron=0,units=None): + result = None + if fichier is None: + if self.appliEficas.demande==True : + self.appliEficas.definitCode(None,None) + if self.appliEficas.code == None:return + if self.appliEficas.code in DictExtensions: - chaine="JDC (*"+DictExtensions[self.appliEficas.code]+");;" - extensions=tr(chaine+ "All Files (*)") + chaine="JDC (*"+DictExtensions[self.appliEficas.code]+");;" + extensions=tr(chaine+ "All Files (*)") elif self.appliEficas.code== "TELEMAC" : extensions=tr('CAS (*.cas);;All Files (*)') else : - extensions=tr('Fichiers JDC (*.comm);;''Tous les Fichiers (*)') + extensions=tr('Fichiers JDC (*.comm);;''Tous les Fichiers (*)') fichier = QFileDialog.getOpenFileName(self.appliEficas, tr('Ouvrir Fichier'), self.appliEficas.maConfiguration.savedir, - extensions) + extensions) fichier=fichier[0] - fichier = os.path.abspath(six.text_type(fichier)) - ulfile = os.path.abspath(six.text_type(fichier)) - self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0] - self.appliEficas.addToRecentList(fichier) - maPage=self.getEditor( fichier,units=units) - if maPage: result = maPage - if maPage : self.myQtab.setTabText(self.myQtab.indexOf(maPage),os.path.basename(fichier)) - return result - - def closeTab(self): - self.handleClose() - - def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter')): - if doitSauverRecent : self.appliEficas.sauveRecents() - index=self.myQtab.currentIndex() - if index < 0 : return - res=self.checkDirty(self.dict_editors[index],texte) - if res == 2 : return 2 # l utilisateur a annule - index=self.myQtab.currentIndex() - idx=index - while idx < len(self.dict_editors) -1 : - self.dict_editors[idx]=self.dict_editors[idx+1] - idx = idx + 1 - del self.dict_editors[len (self.dict_editors) -1] - try : - del self.doubles[self.dict_editors[index]] - except : - pass - self.myQtab.removeTab(index) - return res - - - def run(self): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.run() - - def saveRun(self): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.saveRun() - - def handleCloseAll(self,texte=tr('Quitter')): - res=0 - self.appliEficas.sauveRecents() - while len(self.dict_editors) > 0 : - self.myQtab.setCurrentIndex(0) - res=self.handleClose(0,texte) - if res==2 : return res # l utilsateur a annule - return res - - def handleRechercher(self): - #print "passage dans handleRechercher" - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleRechercher() - - def handleRechercherDsCatalogue(self): - #print "passage dans handleRechercher" - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleRechercherDsCatalogue() - - def handleDeplier(self): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleDeplier() - - def handleEditCopy(self): - #print "passage dans handleEditCopy" - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleEditCopy() - - def handleEditCut(self): - #print "passage dans handleEditCut" - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleEditCut() - - def handleEditPaste(self): - #print "passage dans handleEditPaste" - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleEditPaste() - - def handleSupprimer(self): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleSupprimer() - - def handleAjoutEtape(self,nomEtape): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleAjoutEtape(nomEtape) - - - def newEditor(self,include=0): - if self.appliEficas.demande==True : - self.appliEficas.definitCode(None,None) - if self.appliEficas.code == None:return - maPage=self.getEditor(include=include) - - def newIncludeEditor(self): - self.newEditor(include=1) - - def handleViewJdcFichierSource(self): - index=self.myQtab.currentIndex() - if index < 0 : return - self.dict_editors[index].viewJdcSource() - - def ouvreArbre(self): - index=self.myQtab.currentIndex() - if index < 0 : return - self.dict_editors[index].ouvreArbre() - - def fermeArbre(self): - index=self.myQtab.currentIndex() - if index < 0 : return - self.dict_editors[index].fermeArbre() - - def ajoutCommentaire(self): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.ajoutCommentaire() - - def handleViewJdcRegles(self): - index=self.myQtab.currentIndex() - if index < 0 : return - self.dict_editors[index].viewJdcRegles() - - def handleGestionParam(self): - index=self.myQtab.currentIndex() - if index < 0 : - QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees")) - return - self.dict_editors[index].gestionParam() - - def handleViewJdcRapport(self): - index=self.myQtab.currentIndex() - if index < 0 : return - self.dict_editors[index].viewJdcRapport() - - def handleViewJdcPy(self): - index=self.myQtab.currentIndex() - if index < 0 : return - self.dict_editors[index].viewJdcPy() - - def saveCurrentEditor(self): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - if editor in self.doubles : - QMessageBox.warning( - None, - tr("Fichier Duplique"), - tr("Le fichier ne sera pas sauvegarde."),) - return - ok, newName = editor.saveFile() - if ok : - fileName=os.path.basename(six.text_type(newName)) - self.myQtab.setTabText(index,fileName) - return ok - - def saveCompleteCurrentEditor(self): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - ok, newName = editor.saveCompleteFile() - return ok - - def sauveLigneCurrentEditor(self): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - if editor in self.doubles : - QMessageBox.warning( - None, - tr("Fichier Duplique"), - tr("Le fichier ne sera pas sauvegarde."),) - return - ok, newName = editor.sauveLigneFile() - if ok : - fileName=os.path.basename(six.text_type(newName)) - self.myQtab.setTabText(index,fileName) - return ok - - - def saveAsCurrentEditor(self): - index=self.myQtab.currentIndex() - editor=self.dict_editors[index] - oldName=editor.fichier - ok,newName = editor.saveFileAs() - if ok : - fileName=os.path.basename(six.text_type(newName)) - self.myQtab.setTabText(index,fileName) - if editor in self.doubles : - if oldName != newName : - del self.doubles[editor] - return ok - - def displayJDC(self,jdc,fn=None): + if len(fichier) == 0: return None + fichier = os.path.abspath(fichier) + ulfile = os.path.abspath(fichier) + self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0] + self.appliEficas.addToRecentList(fichier) + maPage = self.getEditor( fichier,units=units) + if maPage : result = maPage + if maPage : self.myQtab.setTabText(self.myQtab.indexOf(maPage),os.path.basename(fichier)) + return result + + def closeTab(self,indexAFermer): + self.handleClose(indexAFermer = indexAFermer) + + def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter'),indexAFermer=None): + if doitSauverRecent : self.appliEficas.sauveRecents() + if indexAFermer == None : index=self.myQtab.currentIndex() + else : index = indexAFermer + if index < 0 : return + res=self.checkDirty(self.dictEditors[index],texte) + if res == 2 : return 2 # l utilisateur a annule + idx=index + while idx < len(self.dictEditors) -1 : + self.dictEditors[idx]=self.dictEditors[idx+1] + idx = idx + 1 + del self.dictEditors[len (self.dictEditors) -1] + try : + del self.doubles[self.dictEditors[index]] + except : + pass + self.myQtab.removeTab(index) + return res + + + def run(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.run() + + def saveRun(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.saveRun() + + def handleCloseAll(self,texte=tr('Quitter')): + res=0 + self.appliEficas.sauveRecents() + while len(self.dictEditors) > 0 : + self.myQtab.setCurrentIndex(0) + res=self.handleClose(0,texte) + if res==2 : return res # l utilsateur a annule + return res + + def handleRechercher(self): + #print "passage dans handleRechercher" + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleRechercher() + + def handleRechercherDsCatalogue(self): + #print "passage dans handleRechercher" + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleRechercherDsCatalogue() + + def handleDeplier(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleDeplier() + + def handleEditCopy(self): + #print "passage dans handleEditCopy" + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleEditCopy() + + def handleEditCut(self): + #print "passage dans handleEditCut" + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleEditCut() + + def handleEditPaste(self): + #print "passage dans handleEditPaste" + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleEditPaste() + + def handleSupprimer(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleSupprimer() + + def handleAjoutEtape(self,nomEtape): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleAjoutEtape(nomEtape) + + + def newEditor(self,include=0): + if self.appliEficas.demande==True : + self.appliEficas.definitCode(None,None) + if self.appliEficas.code == None:return + maPage=self.getEditor(include=include) + + def newIncludeEditor(self): + self.newEditor(include=1) + + def handleViewJdcFichierSource(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dictEditors[index].viewJdcSource() + + def ouvreArbre(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dictEditors[index].ouvreArbre() + + def fermeArbre(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dictEditors[index].fermeArbre() + + def ajoutCommentaire(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.ajoutCommentaire() + + def handleViewJdcRegles(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dictEditors[index].viewJdcRegles() + + def handleGestionParam(self): + index=self.myQtab.currentIndex() + if index < 0 : + QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees")) + return + self.dictEditors[index].gestionParam() + + def handleViewJdcRapport(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dictEditors[index].viewJdcRapport() + + def handleViewJdcPy(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dictEditors[index].viewJdcPy() + + def saveCurrentEditor(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + if editor in self.doubles : + QMessageBox.warning( + None, + tr("Fichier Duplique"), + tr("Le fichier ne sera pas sauvegarde."),) + return + ok, newName = editor.saveFile() + if ok : + fileName=os.path.basename(newName) + self.myQtab.setTabText(index,fileName) + return ok + + def saveCompleteCurrentEditor(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + ok, newName = editor.saveCompleteFile() + return ok + + def sauveLigneCurrentEditor(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + if editor in self.doubles : + QMessageBox.warning( + None, + tr("Fichier Duplique"), + tr("Le fichier ne sera pas sauvegarde."),) + return + ok, newName = editor.sauveLigneFile() + if ok : + fileName=os.path.basename(newName) + self.myQtab.setTabText(index,fileName) + return ok + + def saveAsCurrentEditor(self): + index=self.myQtab.currentIndex() + editor=self.dictEditors[index] + oldName=editor.fichier + ok,newName = editor.saveFileAs() + if ok : + fileName=os.path.basename(newName) + self.myQtab.setTabText(index,fileName) + if editor in self.doubles : + if oldName != newName : + del self.doubles[editor] + return ok + + def displayJDC(self,jdc,fn=None): """ Public slot to display a file in an editor. @param fn name of file to be opened @@ -299,47 +301,47 @@ class MyViewManager(object): editor = self.getEditor(fichier= fn, jdc = jdc ,include=1) self.appliEficas.addToRecentList(editor.getFileName()) - def getEditor(self,fichier = None,jdc = None, units = None,include=0): - newWin = 0 - double = None - indexEditor=0 - for indexEditor in self.dict_editors : - editor=self.dict_editors[indexEditor] - if self.samePath(fichier, editor.getFileName()): - msgBox = QMessageBox() - msgBox.setWindowTitle(tr("Fichier")) - msgBox.setText(tr("Le fichier %s est deja ouvert", str(fichier))) - msgBox.addButton(tr("&Duplication"),0) - msgBox.addButton(tr("&Abandonner"),1) - abort=msgBox.exec_() - if abort: break - double=editor - else : + def getEditor(self,fichier = None,jdc = None, units = None,include=0): + newWin = 0 + double = None + indexEditor=0 + for indexEditor in self.dictEditors : + editor=self.dictEditors[indexEditor] + if self.samePath(fichier, editor.getFileName()): + msgBox = QMessageBox() + msgBox.setWindowTitle(tr("Fichier")) + msgBox.setText(tr("Le fichier %s est deja ouvert", str(fichier))) + msgBox.addButton(tr("&Duplication"),0) + msgBox.addButton(tr("&Abandonner"),1) + abort=msgBox.exec_() + if abort: break + double=editor + else : from .editor import JDCEditor editor = JDCEditor(self.appliEficas,fichier, jdc, self.myQtab,units=units,include=include) - if double != None : - self.doubles[editor]=double + if double != None : + self.doubles[editor]=double if editor.jdc: # le fichier est bien un jdc self.editors.append(editor) newWin = 1 else: editor.closeIt() - if newWin: + if newWin: self.addView(editor, fichier) - elif editor.jdc: + elif editor.jdc: self.myQtab.setCurrentIndex(indexEditor) - index=self.myQtab.currentIndex() - if index != -1 : - self.dict_editors[index]=editor - return editor + index=self.myQtab.currentIndex() + if index != -1 : + self.dictEditors[index]=editor + return editor - def addView(self, win, fichier=None): + def addView(self, win, fichier=None): #PNPNPNPN --> a affiner if fichier is None: self.untitledCount += 1 - self.myQtab.addTab(win, tr("Fichier non encore nomme " + self.appliEficas.readercata.versionCode, self.untitledCount)) + self.myQtab.addTab(win, tr("Fichier non encore nomme") + str(self.untitledCount)) #self.myQtab.addTab(win, str(self.appliEficas.code)) else: liste=fichier.split('/') @@ -351,31 +353,31 @@ class MyViewManager(object): self.currentEditor=win win.setFocus() - def getOpenStartDir(self) : - #PN --> Les Preferences + def getOpenStartDir(self) : + #PN --> Les Preferences try : userDir=os.path.expanduser("~/Eficas_install/") return userDir except : return "" - def samePath(self,f1, f2): - """ - compare two paths. - """ - if f1 is None or f2 is None: return 0 - if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1 - return 0 + def samePath(self,f1, f2): + """ + compare two paths. + """ + if f1 is None or f2 is None: return 0 + if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1 + return 0 - def checkDirty(self, editor,texte): + def checkDirty(self, editor,texte): """ Private method to check dirty status and open a message window. - + @param editor editor window to check @return flag indicating successful reset of the dirty flag (boolean) - """ - res=1 + """ + res=1 if (editor.modified) and (editor in self.doubles) : msgBox = QMessageBox(None) msgBox.setWindowTitle(tr("Fichier Duplique")) @@ -399,34 +401,32 @@ class MyViewManager(object): if res == 0: (ok, newName) = editor.saveFile() if ok: - fileName=os.path.basename(six.text_type(newName)) + fileName=os.path.basename(newName) index=self.myQtab.currentIndex() self.myQtab.setTabText(index,fileName) return ok return res - def handleAjoutGroup(self,listeGroup): - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - editor.handleAjoutGroup(listeGroup) - - def handleFonctionUtilisateur(self,laFonctionUtilisateur, lesArguments): - # Peut-etre a blinder un peu plus sur le nb d argument - index=self.myQtab.currentIndex() - if index < 0 : return - editor=self.dict_editors[index] - if editor.getEtapeCourante() == None : - QMessageBox.information( self.appliEficas, - tr("Selectionner une etape"), - tr("Le texte ne peut pas etre insere dans un fichier vide,\nCreer un materiau vide ou une zone vide et inserer le catalogue apres")) - return - - listeParam = [] - for p in lesArguments: - print (p) - if hasattr(editor,p): listeParam.append(getattr(editor,p)) - if p=="editor" : listeParam.append(editor) - if p=="etapeCourante" : listeParam.append(editor.getEtapeCourante()) - apply(laFonctionUtilisateur,listeParam) - + def handleAjoutGroup(self,listeGroup): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + editor.handleAjoutGroup(listeGroup) + + def handleFonctionUtilisateur(self,laFonctionUtilisateur, lesArguments): + # Peut-etre a blinder un peu plus sur le nb d argument + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dictEditors[index] + if editor.getEtapeCourante() == None : + QMessageBox.information( self.appliEficas, + tr("Selectionner une etape"), + tr("Le texte ne peut pas etre insere dans un fichier vide,\nCreer un materiau vide ou une zone vide et inserer le catalogue apres")) + return + + listeParam = [] + for p in lesArguments: + if hasattr(editor,p): listeParam.append(getattr(editor,p)) + if p=="editor" : listeParam.append(editor) + if p=="etapeCourante" : listeParam.append(editor.getEtapeCourante()) + laFonctionUtilisateur(*listeParam)