Salome HOME
pour virer les print
[tools/eficas.git] / InterfaceQT4 / editor.py
old mode 100644 (file)
new mode 100755 (executable)
index dc96afa..aeb1779
 import types,sys,os, re
 import  subprocess
 import traceback
 import types,sys,os, re
 import  subprocess
 import traceback
-from PyQt4 import *
-from PyQt4.QtGui  import *
-from PyQt4.QtCore import *
+
+from determine import monEnvQT5
+if monEnvQT5:
+    from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter
+    from PyQt5.QtGui import QPalette
+    from PyQt5.QtCore import QProcess, QFileInfo, QTimer, Qt, QDir, QSize
+else :
+    from PyQt4.QtGui  import *
+    from PyQt4.QtCore import *
 import time
 import time
+import pdb
 from datetime import date
 from Extensions.i18n import tr
 
 from datetime import date
 from Extensions.i18n import tr
 
@@ -36,14 +43,16 @@ from Editeur        import comploader
 from Editeur        import Objecttreeitem
 from desBaseWidget  import Ui_baseWidget
 from monViewTexte   import ViewText 
 from Editeur        import Objecttreeitem
 from desBaseWidget  import Ui_baseWidget
 from monViewTexte   import ViewText 
+from monWidgetCreeParam import MonWidgetCreeParam 
 import browser
 import readercata
 
 DictExtensions= {"MAP" : ".map"}
 
 import browser
 import readercata
 
 DictExtensions= {"MAP" : ".map"}
 
+    
 
 
 
 
-class JDCEditor(Ui_baseWidget,QtGui.QWidget):
+class JDCEditor(Ui_baseWidget,QWidget):
 # ----------------------------------------- #
     """
        Editeur de jdc
 # ----------------------------------------- #
     """
        Editeur de jdc
@@ -52,10 +61,15 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     def __init__ (self,appli,fichier = None, jdc = None, QWParent=None, units = None, include=0 , vm=None):
     #----------------------------------------------------------------------------------------------------------#
 
     def __init__ (self,appli,fichier = None, jdc = None, QWParent=None, units = None, include=0 , vm=None):
     #----------------------------------------------------------------------------------------------------------#
 
-        QtGui.QWidget.__init__(self,None)
+        QWidget.__init__(self,None)
+        self.i=0
         self.setupUi(self)
         self.setupUi(self)
-        self.monOptionnel=None
+        self.inhibeSplitter=0
+        self.widgetOptionnel=None
         self.fenetreCentraleAffichee=None
         self.fenetreCentraleAffichee=None
+        self.dejaDansPlieTout=False
+        self.afficheCommandesPliees = True
+        self.listeDesListesOuvertes=set()
         self.appliEficas = appli
         self.appli       = appli  #---- attendu par IHM
         self.vm          = vm
         self.appliEficas = appli
         self.appli       = appli  #---- attendu par IHM
         self.vm          = vm
@@ -63,6 +77,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         self.jdc         = jdc
         self.first      = True
         self.QWParent    = QWParent
         self.jdc         = jdc
         self.first      = True
         self.QWParent    = QWParent
+        self.couleur     = Qt.black
          
         if appli != None :
            self.salome =  self.appliEficas.salome
          
         if appli != None :
            self.salome =  self.appliEficas.salome
@@ -72,29 +87,46 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
 
         # ces attributs sont mis a jour par definitCode appelee par newEditor
         self.code = self.appliEficas.CONFIGURATION.code
 
         # ces attributs sont mis a jour par definitCode appelee par newEditor
         self.code = self.appliEficas.CONFIGURATION.code
-        self.affiche_alpha=1
-        if self.code in ['MAP','Adao'] : 
+
+        #self.afficheListesPliees=False
+        self.afficheListesPliees=True
+        if self.code == "ASTER" or self.code == "monCode" : self.afficheListesPliees =True
+        if self.code == 'PSEN_N1' : self.afficheListesPliees = False
+
+        self.mode_nouv_commande=self.appliEficas.CONFIGURATION.mode_nouv_commande
+        self.closeAutreCommande=self.appliEficas.CONFIGURATION.closeAutreCommande
+        self.closeFrameRechercheCommande=self.appliEficas.CONFIGURATION.closeFrameRechercheCommande
+        self.affiche=self.appliEficas.CONFIGURATION.affiche
+        #if self.code in ['MAP','CARMELCND','PSEN'] : self.afficheCommandesPliees=False
+        if self.code in ['MAP','CARMELCND'] : self.afficheCommandesPliees=False
+        if self.code in ['MAP',] : 
            self.widgetTree.close()
            self.widgetTree=None
            self.appliEficas.resize(1440,self.appliEficas.height())
         else :
            self.widgetTree.close()
            self.widgetTree=None
            self.appliEficas.resize(1440,self.appliEficas.height())
         else :
-           self.appliEficas.resize(2000,self.appliEficas.height())
+           self.appliEficas.resize(1800,self.appliEficas.height())
 
         self.version_code = session.d_env.cata
 
         if not hasattr ( self.appliEficas, 'readercata') or  self.appliEficas.multi==True:
            self.readercata  = readercata.READERCATA( self, self.appliEficas )
            self.appliEficas.readercata=self.readercata
 
         self.version_code = session.d_env.cata
 
         if not hasattr ( self.appliEficas, 'readercata') or  self.appliEficas.multi==True:
            self.readercata  = readercata.READERCATA( self, self.appliEficas )
            self.appliEficas.readercata=self.readercata
+           self.appliEficas.code=self.code
         else :
            self.readercata=self.appliEficas.readercata
         if self.readercata.fic_cata == None : return    #Sortie Salome
         self.titre=self.readercata.titre
         else :
            self.readercata=self.appliEficas.readercata
         if self.readercata.fic_cata == None : return    #Sortie Salome
         self.titre=self.readercata.titre
+        self.Ordre_Des_Commandes=self.readercata.Ordre_Des_Commandes
+        self.Classement_Commandes_Ds_Arbre=self.readercata.Classement_Commandes_Ds_Arbre
 
         self.format =  self.appliEficas.format_fichier
 
         self.dict_reels={}
 
         self.format =  self.appliEficas.format_fichier
 
         self.dict_reels={}
+        self.splitterSizes =  [320,1320,320]
+        self.oldSizeWidgetOptionnel = 320
         self.liste_simp_reel=[]
         self.ihm="QT"
         self.liste_simp_reel=[]
         self.ihm="QT"
+        self.dicoNouveauxMC={}
 
         nameConf='configuration_'+self.code
         configuration=__import__(nameConf)
 
         nameConf='configuration_'+self.code
         configuration=__import__(nameConf)
@@ -111,6 +143,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
 
         try:
           self.CONFIGURATION.convert_module
 
         try:
           self.CONFIGURATION.convert_module
+          #print self.CONFIGURATION.convert_module
           _module = __import__(self.CONFIGURATION.convert_module)
           info = _module.entryPoint()
           convert.plugins.addEntryPoint(info)
           _module = __import__(self.CONFIGURATION.convert_module)
           info = _module.entryPoint()
           convert.plugins.addEntryPoint(info)
@@ -129,22 +162,29 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         self.node_selected = []
         self.deplier = True
         self.message=''
         self.node_selected = []
         self.deplier = True
         self.message=''
+        if self.code in ['Adao','MAP'] : self.afficheApresInsert=True
+        else :  self.afficheApresInsert=False
+        if self.code in ['TELEMAC',] : self.enteteQTree='premier'
+        else : self.enteteQTree='complet'
+        if self.code in ['Adao','TELEMAC'] : self.affichePlie=True
+        else : self.affichePlie=False
 
         self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
 
         #------- construction du jdc --------------
 
         jdc_item = None
 
         self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
 
         #------- construction du jdc --------------
 
         jdc_item = None
-        self.mode_nouv_commande=self.readercata.mode_nouv_commande
 
         self.nouveau=0
         if self.fichier is not None:        #  fichier jdc fourni
             self.fileInfo = QFileInfo(self.fichier)
             self.fileInfo.setCaching(0)
             if jdc==None :
 
         self.nouveau=0
         if self.fichier is not None:        #  fichier jdc fourni
             self.fileInfo = QFileInfo(self.fichier)
             self.fileInfo.setCaching(0)
             if jdc==None :
-               try :
+              # try :
+              if 1:
                    self.jdc = self.readFile(self.fichier)
                    self.jdc = self.readFile(self.fichier)
-               except :
+               #except :
+              else :
                    print "mauvaise lecture"
             else :
                self.jdc=jdc
                    print "mauvaise lecture"
             else :
                self.jdc=jdc
@@ -160,16 +200,17 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
                 self.nouveau=1
 
         if self.jdc:
                 self.nouveau=1
 
         if self.jdc:
-            self.jdc.appli = self
+            self.jdc.appli = self # a resorber
+            self.jdc.editor = self 
             self.jdc.lang    = self.appli.langue
             self.jdc.lang    = self.appli.langue
-            print self.jdc.lang
+            self.jdc.aReafficher=False
             txt_exception  = None
             if not jdc:
                 self.jdc.analyse()
                 txt_exception = self.jdc.cr.get_mess_exception()
             if txt_exception:
                 self.jdc = None
             txt_exception  = None
             if not jdc:
                 self.jdc.analyse()
                 txt_exception = self.jdc.cr.get_mess_exception()
             if txt_exception:
                 self.jdc = None
-                qApp.restoreOverrideCursor()
+                QApplication.restoreOverrideCursor()
                 self.affiche_infos(tr("Erreur fatale au chargement de %s",str(fichier)),Qt.red)
                 if (self.appliEficas.ssIhm == False) : QMessageBox.critical( self, tr("Erreur fatale au chargement d'un fichier"), txt_exception)
             else:
                 self.affiche_infos(tr("Erreur fatale au chargement de %s",str(fichier)),Qt.red)
                 if (self.appliEficas.ssIhm == False) : QMessageBox.critical( self, tr("Erreur fatale au chargement d'un fichier"), txt_exception)
             else:
@@ -177,11 +218,71 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
                 jdc_item=Objecttreeitem.make_objecttreeitem( self, "nom", self.jdc )
                 if (not self.jdc.isvalid()) and (not self.nouveau) and (self.appliEficas.ssIhm == False):
                     self.viewJdcRapport()
                 jdc_item=Objecttreeitem.make_objecttreeitem( self, "nom", self.jdc )
                 if (not self.jdc.isvalid()) and (not self.nouveau) and (self.appliEficas.ssIhm == False):
                     self.viewJdcRapport()
 
 
-        if jdc_item:
+
+        if jdc_item and self.appliEficas.ssIhm==False:
             self.tree = browser.JDCTree( jdc_item,  self )
         self.appliEficas.construitMenu()
 
             self.tree = browser.JDCTree( jdc_item,  self )
         self.appliEficas.construitMenu()
 
+        
+        #############
+        self.splitterSizes =  [320,1320,320]
+        self.splitter.setSizes(self.splitterSizes)
+        self.saveSplitterSizes()
+
+
+    #-------------------#  Pour execution avec output et error dans le bash
+    def runPSEN(self):
+    #-------------------#
+      #if self.modified or self.fichier==None  : self.saveFile()
+      self.saveFile()
+        
+      #lancement avec le .bat
+      path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','PSEN_Eficas','PSEN'))
+      WrapperFilePath = os.path.join(path1, 'PSSEWrapper.py') 
+      import subprocess
+      p = subprocess.Popen(['python',WrapperFilePath])
+      (out,err)=p.communicate()        
+      print out
+      print err
+
+    #-------------------#  Pour execution avec output et error dans le bash
+    def runPSEN_N1(self):
+    #-------------------#
+      #cmd = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','PSEN_N1','run.py'))
+      #cmd = "from run import runPSEN_N1; dico="+str(dico)
+      
+      #textePython=("python "+ cmd + " "+ str(dico))
+      #self._viewTextExecute( textePython,"psen_run",".sh")
+      if generator.plugins.has_key('dicoImbrique'):
+         self.generator=generator.plugins['dicoImbrique']()
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.generator.Dico 
+         
+         ###to delete
+         #fileDico =  r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
+         #f = open( str(fileDico), 'wb')
+         #f.write("Dico =" + str(dico) )
+         #f.close()
+         ###
+         
+      
+      path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
+      sys.path.append(path1)
+      print 'in runPSEN_N1', dico
+      #from Run import run 
+      #res,txt_exception=run(dico)
+      #if res : QMessageBox.information( self, tr("fin de script run"), txt_exception)
+      #else  : QMessageBox.critical( self, tr("Erreur fatale script run"), txt_exception)
+       
+
+    #-------------------#  Pour execution avec output et error dans le bash
+    def process_N1(self):
+    #-------------------#
+        return self.get_Dico()
+
+
     #--------------------------------#
     def _newJDC( self ,units = None):
     #--------------------------------#
     #--------------------------------#
     def _newJDC( self ,units = None):
     #--------------------------------#
@@ -194,6 +295,10 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         texte=""
         if self.code == "CARMELCND" : texte=self._newJDCCND()
         if self.code == "ZCRACKS" : texte=self._newZCRACKS()
         texte=""
         if self.code == "CARMELCND" : texte=self._newJDCCND()
         if self.code == "ZCRACKS" : texte=self._newZCRACKS()
+        if self.code == "TELEMAC" : texte=self._newTELEMAC()
+        if self.code == "PSEN" : texte = self._newPSEN()
+        if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
+        #if self.code == "CF" : texte = self._new_CF()
         #   texte=self.newTexteCND
        
         jdc=self.readercata.cata[0].JdC( procedure =texte,
         #   texte=self.newTexteCND
        
         jdc=self.readercata.cata[0].JdC( procedure =texte,
@@ -323,12 +428,10 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
             QMessageBox.critical( self, tr("Type de fichier non reconnu"),tr("EFICAS ne sait pas ouvrir ce type de fichier"))
             return None
 
             QMessageBox.critical( self, tr("Type de fichier non reconnu"),tr("EFICAS ne sait pas ouvrir ce type de fichier"))
             return None
 
-    #----------------------------------------------#
-    def _viewText(self, txt, caption = "FILE_VIEWER"):
-    #----------------------------------------------#
-        w = ViewText( self.QWParent )
-        w.setWindowTitle( caption )
-        w.setText(txt)
+    #-----------------------------------------------------------------------#
+    def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
+    #--------------------------------------------------------------------#
+        w = ViewText( self.QWParent,self ,caption,txt,largeur,hauteur)
         w.show()
     #
 
         w.show()
     #
 
@@ -353,9 +456,13 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         f=open(nomFichier,'w')
         f.write(txt)
         f.close()
         f=open(nomFichier,'w')
         f.write(txt)
         f.close()
-        self.connect(self.monExe, SIGNAL("readyReadStandardOutput()"), self.readFromStdOut )
-        self.connect(self.monExe, SIGNAL("readyReadStandardError()"), self.readFromStdErr )
-        exe='sh /tmp/test.sh'
+        if monEnvQT5 :
+           self.monExe.readyReadStandardOutput.connect( self.readFromStdOut)
+           self.monExe.readyReadStandardError.connect( self.readFromStdErr)
+        else :
+           self.connect(self.monExe, SIGNAL("readyReadStandardOutput()"), self.readFromStdOutQT4 )
+           self.connect(self.monExe, SIGNAL("readyReadStandardError()"), self.readFromStdErrQT4 )
+        exe='sh ' + nomFichier
         self.monExe.start(exe)
         self.monExe.closeWriteChannel()
         self.w.exec_()
         self.monExe.start(exe)
         self.monExe.closeWriteChannel()
         self.w.exec_()
@@ -365,17 +472,30 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         except :
           pass
 
         except :
           pass
 
-
     def readFromStdErr(self):
     def readFromStdErr(self):
+        a=self.monExe.readAllStandardError()
+        self.w.view.append(str(a.data(),len(a)))
+
+    def readFromStdErr(self) :
+        a=self.monExe.readAllStandardOutput()
+        self.w.view.append(str(a.data(),len(a)))
+
+    def readFromStdErrQT4(self):
         a=self.monExe.readAllStandardError()
         self.w.view.append(QString.fromUtf8(a.data(),len(a))) ;
 
         a=self.monExe.readAllStandardError()
         self.w.view.append(QString.fromUtf8(a.data(),len(a))) ;
 
-    def readFromStdOut(self) :
+    def readFromStdOutQT4(self) :
         a=self.monExe.readAllStandardOutput()
         self.w.view.append(QString.fromUtf8(a.data(),len(a))) ;
         
 
 
         a=self.monExe.readAllStandardOutput()
         self.w.view.append(QString.fromUtf8(a.data(),len(a))) ;
         
 
 
+    #-----------------------#
+    def gestionParam(self):
+    #-----------------------#
+        w = MonWidgetCreeParam( self)
+        w.show()
+
     #-----------------------#
     def viewJdcSource(self):
     #-----------------------#
     #-----------------------#
     def viewJdcSource(self):
     #-----------------------#
@@ -394,8 +514,16 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     def viewJdcRapport(self):
     #-----------------------#
         strRapport = unicode( self.jdc.report() )
     def viewJdcRapport(self):
     #-----------------------#
         strRapport = unicode( self.jdc.report() )
+        # on ajoute les regles
+        
         self._viewText(strRapport, "JDC_RAPPORT")
 
         self._viewText(strRapport, "JDC_RAPPORT")
 
+    #-----------------------#
+    def viewJdcRegles(self):
+    #-----------------------#
+        if self.tree :self.tree.AppelleBuildLBRegles()
+
+
     #----------------#
     def closeIt(self):
     #----------------#
     #----------------#
     def closeIt(self):
     #----------------#
@@ -411,10 +539,10 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     #----------------------------------------------#
         if self.sb:
            mapalette=self.sb.palette()
     #----------------------------------------------#
         if self.sb:
            mapalette=self.sb.palette()
-           from PyQt4.QtGui import QPalette
            mapalette.setColor( QPalette.WindowText, couleur )
            self.sb.setPalette( mapalette );
            mapalette.setColor( QPalette.WindowText, couleur )
            self.sb.setPalette( mapalette );
-           self.sb.showMessage(QString.fromUtf8(message))#,2000)
+           self.sb.showMessage(message,4000)
+           self.couleur=couleur
 
     #------------------------------#
     def affiche_alerte(self,titre,message):
 
     #------------------------------#
     def affiche_alerte(self,titre,message):
@@ -422,6 +550,17 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     # appele par I_MACRO_ETAPE
         QMessageBox.information( self, titre, message)
 
     # appele par I_MACRO_ETAPE
         QMessageBox.information( self, titre, message)
 
+    #-----------------------------------#
+    def affiche_commentaire(self,message):
+    #-----------------------------------#
+        self.labelCommentaire.setText(message)
+        QTimer.singleShot(6000, self.rendInvisible)
+
+    #----------------------#
+    def rendInvisible(self):
+    #----------------------#
+        self.labelCommentaire.setText("")
+
     #-------------------#
     def init_modif(self):
     #-------------------#
     #-------------------#
     def init_modif(self):
     #-------------------#
@@ -459,17 +598,33 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
       monRechercheDialg=DRecherche(parent=self,fl=0)
       monRechercheDialg.show()
 
       monRechercheDialg=DRecherche(parent=self,fl=0)
       monRechercheDialg.show()
 
+
+    #--------------------------------#
+    def handleRechercherDsCatalogue(self):
+    #-----------------------------#
+      from monRechercheCatalogue import DRechercheCatalogue
+      monRechercheDialg=DRechercheCatalogue(self.QWParent,self)
+      monRechercheDialg.show()
+
     #---------------------#
     def handleDeplier(self):
     #---------------------#
        if self.tree == None : return
     #---------------------#
     def handleDeplier(self):
     #---------------------#
        if self.tree == None : return
-       self.tree.collapseAll()
+       #self.tree.collapseAll()
        if self.deplier :
        if self.deplier :
-          self.tree.collapseItem(self.tree.topLevelItem(0))
+          #print "je plie"
+          self.tree.expandItem(self.tree.topLevelItem(0))
           self.deplier = False
           self.deplier = False
+          if self.fenetreCentraleAffichee != None  :
+             if hasattr(self.fenetreCentraleAffichee.node,'plieToutEtReaffiche'):
+                 self.fenetreCentraleAffichee.node.plieToutEtReaffiche()
        else:
        else:
+          #print "je deplie"
           self.tree.expandItem(self.tree.topLevelItem(0))
           self.deplier = True
           self.tree.expandItem(self.tree.topLevelItem(0))
           self.deplier = True
+          if self.fenetreCentraleAffichee != None  :
+             if hasattr(self.fenetreCentraleAffichee.node,'deplieToutEtReaffiche'):
+                 self.fenetreCentraleAffichee.node.deplieToutEtReaffiche()
 
     #---------------------#
     def handleEditCut(self):
 
     #---------------------#
     def handleEditCut(self):
@@ -524,11 +679,13 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
          indexNoeudOuColler=0
          pos='before'
       else :
          indexNoeudOuColler=0
          pos='before'
       else :
-         indexNoeudOuColler=noeudOuColler.treeParent.children.index(noeudOuColler)
+         #indexNoeudOuColler=noeudOuColler.treeParent.children.index(noeudOuColler)
+         indexNoeudOuColler=self.getTreeIndex(noeudOuColler)
 
       try :
        noeudACopier=self.QWParent.noeud_a_editer[0]
 
       try :
        noeudACopier=self.QWParent.noeud_a_editer[0]
-       indexNoeudACopier=noeudACopier.treeParent.children.index(noeudACopier)
+       #indexNoeudACopier=noeudACopier.treeParent.children.index(noeudACopier)
+       indexNoeudACopier=self.getTreeIndex(noeudACopier)
       except :
        QMessageBox.information( self, tr("Copie impossible"), tr("Aucun Objet n a ete copie ou coupe"))
        return
       except :
        QMessageBox.information( self, tr("Copie impossible"), tr("Aucun Objet n a ete copie ou coupe"))
        return
@@ -570,7 +727,8 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
 
          #if 1:
          try :
 
          #if 1:
          try :
-            indexNoeudACopier=noeudACopier.treeParent.children.index(noeudACopier)
+           # indexNoeudACopier=noeudACopier.treeParent.children.index(noeudACopier)
+            indexNoeudACopier=self.getTreeIndex(noeudACopier)
             noeudACopier.treeParent.item.deplaceEntite(indexNoeudACopier,indexNoeudOuColler,pos)
             noeudACopier.treeParent.build_children()
 
             noeudACopier.treeParent.item.deplaceEntite(indexNoeudACopier,indexNoeudOuColler,pos)
             noeudACopier.treeParent.build_children()
 
@@ -670,23 +828,23 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
      fichier = QFileDialog.getOpenFileName(self.appliEficas,
                    tr('Ouvrir Fichier'),
                    self.appliEficas.CONFIGURATION.savedir,
      fichier = QFileDialog.getOpenFileName(self.appliEficas,
                    tr('Ouvrir Fichier'),
                    self.appliEficas.CONFIGURATION.savedir,
-                   self.appliEficas.trUtf8('Wrapper Files (*.xml);;''All Files (*)'))
+                   tr('Wrapper Files (*.xml);;''All Files (*)'))
      return  fichier
 
      return  fichier
 
-    #----------------------------------#
-    def writeFile(self, fn, txt = None):
-    #----------------------------------#
+    #--------------------------------------------------#
+    def writeFile(self, fn, txt = None,formatLigne="beautifie"):
+    #--------------------------------------------------#
         """
         Public slot to write the text to a file.
 
         """
         Public slot to write the text to a file.
 
-        @param fn filename to write to (string or QString)
+        @param fn filename to write to string
         @return flag indicating success
         """
 
         fn = unicode(fn)
         @return flag indicating success
         """
 
         fn = unicode(fn)
-
+       
         if txt == None :
         if txt == None :
-            txt = self.get_text_JDC(self.format)
+            txt = self.get_text_JDC(self.format,formatLigne=formatLigne)
             eol = '\n'
             if len(txt) >= len(eol):
                if txt[-len(eol):] != eol:
             eol = '\n'
             if len(txt) >= len(eol):
                if txt[-len(eol):] != eol:
@@ -702,20 +860,23 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
             f.close()
             return 1
         except IOError, why:
             f.close()
             return 1
         except IOError, why:
-            QMessageBox.critical(self, self.trUtf8('Save File'),
-                self.trUtf8('The file <b>%1</b> could not be saved.<br>Reason: %2')
-                    .arg(unicode(fn)).arg(str(why)))
+            if (self.appliEficas.ssIhm == False):
+                QMessageBox.critical(self, tr('Sauvegarde du Fichier'),
+                tr('Le fichier')+str(fn) + tr('n a pas pu etre sauvegarde : ') + str(why))
+            else :
+                print why
             return 0
 
             return 0
 
-    #-------------------------------------#
-    def get_text_JDC(self,format,pourRun=0):
-    #-------------------------------------#
+    #-----------------------------------------------------------#
+    def get_text_JDC(self,format,pourRun=0,formatLigne="beautifie"):
+    #-----------------------------------------------------------#
       if self.code == "MAP" and not(generator.plugins.has_key(format)): format = "MAP"
       if generator.plugins.has_key(format):
       if self.code == "MAP" and not(generator.plugins.has_key(format)): format = "MAP"
       if generator.plugins.has_key(format):
+         
          # Le generateur existe on l'utilise
          self.generator=generator.plugins[format]()
          try :
          # Le generateur existe on l'utilise
          self.generator=generator.plugins[format]()
          try :
-            jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
+            jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.CONFIGURATION,appli=self.appliEficas)
             if pourRun : jdc_formate=self.generator.textePourRun
          except ValueError,e:
             QMessageBox.critical(self, tr("Erreur a la generation"),str(e))
             if pourRun : jdc_formate=self.generator.textePourRun
          except ValueError,e:
             QMessageBox.critical(self, tr("Erreur a la generation"),str(e))
@@ -731,10 +892,25 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
          QMessageBox.critical( self, "Format  non reconnu" ,tr("EFICAS ne sait pas convertir le JDC selon le format "+ self.format))
          return ""
 
          QMessageBox.critical( self, "Format  non reconnu" ,tr("EFICAS ne sait pas convertir le JDC selon le format "+ self.format))
          return ""
 
+    #----------------------#
+    def get_Dico(self):
+    #---------------------#
+      if generator.plugins.has_key('dicoImbrique'):
+         self.generator=generator.plugins['dicoImbrique']()
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.generator.Dico 
+         return dico
+      else : 
+         self.affiche_infos(tr("Format %s non reconnu" , self.format),Qt.red)
+         QMessageBox.critical( self, "Format  non reconnu" ,tr("EFICAS ne sait pas convertir le JDC selon le format "+ self.format))
+         return ""
+
+
     #------------#
     def run(self):
     #------------#
       fonction="run"+self.code
     #------------#
     def run(self):
     #------------#
       fonction="run"+self.code
+      #print fonction
       if fonction in JDCEditor.__dict__.keys(): apply(JDCEditor.__dict__[fonction],(self,))
 
     #------------#
       if fonction in JDCEditor.__dict__.keys(): apply(JDCEditor.__dict__[fonction],(self,))
 
     #------------#
@@ -775,11 +951,11 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
 
           #textePython="ls -l"
           self._viewTextExecute( textePython,"map_run",".sh")
 
           #textePython="ls -l"
           self._viewTextExecute( textePython,"map_run",".sh")
-          try:
-             commande="rm  "+self.fichierMapInput
-             os.system(commande)
-          except :
-             pass
+          #try:
+          #  commande="rm  "+self.fichierMapInput
+          #   os.system(commande)
+          #except :
+          #   pass
       except Exception, e:
           print traceback.print_exc()
 
       except Exception, e:
           print traceback.print_exc()
 
@@ -844,9 +1020,9 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     #-----------------------------------------------------#
       if DictExtensions.has_key(self.appli.code) :
          chaine1="JDC (*"+DictExtensions[self.appli.code]+");;"
     #-----------------------------------------------------#
       if DictExtensions.has_key(self.appli.code) :
          chaine1="JDC (*"+DictExtensions[self.appli.code]+");;"
-         extensions= self.trUtf8(chaine1+ "All Files (*)")
+         extensions= tr(chaine1+ "All Files (*)")
       else :
       else :
-         extensions= self.trUtf8("JDC (*.comm);;" "All Files (*)")
+         extensions= tr("JDC (*.comm);;" "All Files (*)")
 
       if self.appli.code == "MAP" :
          extensions = extensions + ";; Run (*.input);;"
 
       if self.appli.code == "MAP" :
          extensions = extensions + ";; Run (*.input);;"
@@ -855,16 +1031,27 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
              tr("sauvegarde"), path,
              extensions,None,
              QFileDialog.DontConfirmOverwrite)
              tr("sauvegarde"), path,
              extensions,None,
              QFileDialog.DontConfirmOverwrite)
-      if fn.isNull(): return (0, None)
+      if fn == None : return (0, None)
+      if monEnvQT5 :  fn=fn[0]
+      if fn=='': return (0, None)
+
       ext = QFileInfo(fn).suffix()
       ext = QFileInfo(fn).suffix()
-      if ext.isEmpty(): fn.append(extension)
+      if ext == '': fn+=extension
 
       if QFileInfo(fn).exists():
 
       if QFileInfo(fn).exists():
-           abort = QMessageBox.warning(self,
+           if monEnvQT5 :
+             msgBox = QMessageBox(self)
+             msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
+             msgBox.setText(tr("Le fichier <b>%s</b> existe deja.", unicode(fn)))
+             msgBox.addButton(tr("&Ecraser"),0)
+             msgBox.addButton(tr("&Abandonner"),1)
+             abort=msgBox.exec_()
+           else :
+             abort = QMessageBox.warning(self,
                    tr("Sauvegarde du Fichier"),
                    tr("Le fichier <b>%s</b> existe deja.",str(fn)),
                    tr("&Ecraser"),
                    tr("Sauvegarde du Fichier"),
                    tr("Le fichier <b>%s</b> existe deja.",str(fn)),
                    tr("&Ecraser"),
-                   self.trUtf8("&Abandonner"))
+                   tr("&Abandonner"))
            if abort == 1 :  return (0, "")
       return (1,fn)
 
            if abort == 1 :  return (0, "")
       return (1,fn)
 
@@ -885,7 +1072,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
                                  )
            return
         if hasattr(self.CONFIGURATION, "savedir"): path=self.CONFIGURATION.savedir
                                  )
            return
         if hasattr(self.CONFIGURATION, "savedir"): path=self.CONFIGURATION.savedir
-        else : path=os.environ['HOME']
+        else : path='C:/'
 
         monNomFichier=""
         if self.fichier is not None and self.fichier != "" :
 
         monNomFichier=""
         if self.fichier is not None and self.fichier != "" :
@@ -905,15 +1092,19 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
                for b in c.children():
                   if isinstance(b,QPushButton):
                      avant=b.text()
                for b in c.children():
                   if isinstance(b,QPushButton):
                      avant=b.text()
-                     if avant.toLatin1()=="&Open":
-                        b.setText("Save")
-        mesFiltres=QStringList()
-        mesFiltres << "input Map (*.input)" << "All Files (*)"
+                     if (not monEnvQT5) and avant.toLatin1()=="&Open": b.setText("Save")
+                     if monEnvQT5 and avant=="&Open": b.setText("Save")
+        if monEnvQT5 :
+           mesFiltres= "input Map (*.input);;All Files (*)"
+        else :
+           mesFiltres=QStringList()
+           mesFiltres << "input Map (*.input)" << "All Files (*)"
         monDialog.setNameFilters(mesFiltres)
         if monNomFichier!="" : monDialog.selectFile(monNomFichier)
         BOk=monDialog.exec_()
         if BOk==0: return
         monDialog.setNameFilters(mesFiltres)
         if monNomFichier!="" : monDialog.selectFile(monNomFichier)
         BOk=monDialog.exec_()
         if BOk==0: return
-        fn=str(monDialog.selectedFiles()[0].toLatin1())
+        if monEnvQT5 : fn=str(monDialog.selectedFiles()[0])
+        else : fn=str(monDialog.selectedFiles()[0].toLatin1())
         if fn == "" or fn == None : return
         if not fn.endswith(".input"):
             fn += ".input"
         if fn == "" or fn == None : return
         if not fn.endswith(".input"):
             fn += ".input"
@@ -929,6 +1120,41 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         (output, err) = p.communicate()
 
 
         (output, err) = p.communicate()
 
 
+    #-----------------#
+    def saveRunPSEN(self):
+    #-----------------#
+        print "saveRunPSEN"
+        self.saveFile()
+        return
+        if not(self.jdc.isvalid()):
+           QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
+                                tr("Un JdC valide est necessaire pour creer un .input")
+                                 )
+           return
+
+        #print generator.plugins.has_key(self.format)
+        if generator.plugins.has_key(self.format):
+             # Le generateur existe on l'utilise
+             self.generator=generator.plugins[self.format]()
+             try :
+                self.generator.gener(self.jdc)
+                self.generator.writeDefault('')
+             except ValueError,e:
+                QMessageBox.critical(self, tr("Erreur a la generation"),str(e))
+             if not self.generator.cr.estvide():
+                self.affiche_infos(tr("Erreur a la generation"),Qt.red)
+                QMessageBox.critical( self, tr("Erreur a la generation"),tr("EFICAS ne sait pas convertir ce JDC"))
+                return ""
+        else:
+             # Il n'existe pas c'est une erreur
+             self.affiche_infos(tr("Format %s non reconnu" , self.format),Qt.red)
+             QMessageBox.critical( self, "Format  non reconnu" ,tr("EFICAS ne sait pas convertir le JDC selon le format "+ self.format))
+             return ""
+        #print "HELLO"
+        
+
+
+
     #-----------------------------------------#
     def cherche_Groupes(self):
     #-----------------------------------------#
     #-----------------------------------------#
     def cherche_Groupes(self):
     #-----------------------------------------#
@@ -962,9 +1188,9 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         #else :
            pass
 
         #else :
            pass
 
-    #-----------------------------------------#
-    def saveFile(self, path = None, saveas= 0):
-    #-----------------------------------------#
+    #-----------------------------------------------------------------#
+    def saveFile(self, path = None, saveas= 0,formatLigne="beautifie"):
+    #-----------------------------------------------------------------#
         """
         Public slot to save the text to a file.
 
         """
         Public slot to save the text to a file.
 
@@ -973,7 +1199,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
             the name of the saved file
         """
 
             the name of the saved file
         """
 
-        #self.modified=1
+        self.modified=1
         if not self.modified and not saveas:
             return (0, None)      # do nothing if text wasn't changed
 
         if not self.modified and not saveas:
             return (0, None)      # do nothing if text wasn't changed
 
@@ -986,19 +1212,19 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         newName = None
         fn = self.fichier
         if self.fichier is None or saveas:
         newName = None
         fn = self.fichier
         if self.fichier is None or saveas:
-          if path is None:
-             path=self.CONFIGURATION.savedir
+          if path is None: path=self.CONFIGURATION.savedir
           bOK, fn=self.determineNomFichier(path,extension)
           if bOK == 0 : return (0, None)
           if fn == None : return (0, None)
           bOK, fn=self.determineNomFichier(path,extension)
           if bOK == 0 : return (0, None)
           if fn == None : return (0, None)
-          if fn.isNull(): return (0, None)
+          if fn== '' : return (0, None)
 
           ulfile = os.path.abspath(unicode(fn))
           self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
 
           ulfile = os.path.abspath(unicode(fn))
           self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
-          fn = unicode(QDir.convertSeparators(fn))
+          fn = unicode(QDir.toNativeSeparators(fn))
           newName = fn
 
           newName = fn
 
-        if not (self.writeFile(fn)): return (0, None)
+
+        if not (self.writeFile(fn,formatLigne=formatLigne)): return (0, None)
         self.fichier = fn
         self.modified  = False
         if self.fileInfo is None or saveas:
         self.fichier = fn
         self.modified  = False
         if self.fileInfo is None or saveas:
@@ -1012,6 +1238,8 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
 
         if self.jdc.isvalid() != 0 and hasattr(self.generator, "writeDefault"):
             self.generator.writeDefault(fn)
 
         if self.jdc.isvalid() != 0 and hasattr(self.generator, "writeDefault"):
             self.generator.writeDefault(fn)
+        if self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
+            self.generator.writeDefault(fn)
 
         if self.salome :
                self.appliEficas.addJdcInSalome( self.fichier)
 
         if self.salome :
                self.appliEficas.addJdcInSalome( self.fichier)
@@ -1021,6 +1249,14 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
 
         return (1, self.fichier)
 #
 
         return (1, self.fichier)
 #
+
+    #----------------------------------------------#
+    def sauveLigneFile(self):
+    #----------------------------------------------#
+        self.modified=1
+        return self.saveFile(formatLigne="Ligne")
+
+
     #----------------------------------------------#
     def saveFileAs(self, path = None,fileName=None):
     #----------------------------------------------#
     #----------------------------------------------#
     def saveFileAs(self, path = None,fileName=None):
     #----------------------------------------------#
@@ -1034,7 +1270,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         if fileName != None :
            self.fichier = fileName
            return self.saveFile()
         if fileName != None :
            self.fichier = fileName
            return self.saveFile()
-        return self.saveFile(path,1)
+        return self.saveFile(path,1,"beautifie")
 
 
 
 
 
 
@@ -1057,14 +1293,15 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
             texte = tr("Le fichier %s contient une commande POURSUITE\n", fic_origine)
             texte = texte+tr('Donnez le nom du fichier dont vous \n voulez faire une poursuite')
 
             texte = tr("Le fichier %s contient une commande POURSUITE\n", fic_origine)
             texte = texte+tr('Donnez le nom du fichier dont vous \n voulez faire une poursuite')
 
-        QMessageBox.information( self, titre,QString.fromUtf8(texte))
+        QMessageBox.information( self, titre,texte)
         fn = QFileDialog.getOpenFileName(self.appliEficas,
                    titre,
                    self.appliEficas.CONFIGURATION.savedir)
 
         fn = QFileDialog.getOpenFileName(self.appliEficas,
                    titre,
                    self.appliEficas.CONFIGURATION.savedir)
 
-        if fn.isNull():
         # ce retour est impose par le get_file d'I_JDC
         # ce retour est impose par le get_file d'I_JDC
-           return None," "
+        if fn== '' : return None," "
+        if not fn : return (0, " ")
+        if monEnvQT5 :  fn=fn[0]
 
         ulfile = os.path.abspath(unicode(fn))
         self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
 
         ulfile = os.path.abspath(unicode(fn))
         self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
@@ -1089,8 +1326,102 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         etape.build_includeInclude(texte)
         self.tree.racine.build_children()
 
         etape.build_includeInclude(texte)
         self.tree.racine.build_children()
 
+    #-------------------------------------#
+    def deleteEtape(self,etape):
+    #-------------------------------------#
+        self.jdc.suppentite(etape)
 
 
+    #-------------------------------------#
+    def deleteMC(self,etape,MCFils,listeAvant=()):
+    #-------------------------------------#
+        ouChercher=etape
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        if monMC != None :  ouChercher.suppentite(monMC)
+        ouChercher.state='changed'
+        ouChercher.isvalid()
 
 
+    #-------------------------------------#
+    def ajoutMC(self,etape,MCFils,valeurs,listeAvant=()):
+    #-------------------------------------#
+        ouChercher=etape
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+        monMC=etape.get_child(ouChercher,restreint="oui")
+        if monMC== None : monMC= ouChercher.addentite(MCFils)
+        monMC.valeur=valeurs
+        monMC.val=valeurs
+        monMC.state='changed'
+        monMC.isvalid()
+
+    #-----------------------------------------------------------#
+    def changeIntoMC(self,etape,MCFils,valeurs, listeAvant=()):
+    #-----------------------------------------------------------#
+        ouChercher=etape
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+        if ouChercher ==None : print 'SOUCI'; return
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        if monMC== None : monMC= ouChercher.addentite(MCFils)
+        monMC.definition.into=valeurs
+        monMC.state='changed'
+        monMC.isvalid()
+
+    #-------------------------------------#
+    def changeIntoDefMC(self,etape,listeMC,valeurs):
+    #-------------------------------------#
+        definitionEtape=getattr(self.jdc.cata[0],etape)
+        ouChercher=definitionEtape
+        if len(listeMC) > 1 :
+           for mc in listeMC[0:-1]:
+             mcfact=ouChercher.entites[mc]
+             ouChercher=mcfact
+           
+        mcAccas=ouChercher.entites[listeMC[-1]]
+        mcAccas.into=valeurs
+
+    #-------------------------------------------------------------#
+    def deleteDefinitionMC(self,etape,listeAvant,nomDuMC):
+    #-------------------------------------------------------------#
+        #print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC
+        definitionEtape=getattr(self.jdc.cata[0],etape)
+        ouChercher=definitionEtape
+        for k in listeAvant : 
+            ouChercher=ouChercher.entites[k]
+        MCADetruire=ouChercher.entites[nomDuMC]
+        ouChercher.ordre_mc.remove(nomDuMC)
+        del ouChercher.entites[nomDuMC]
+        del self.dicoNouveauxMC[nomDuMC]
+
+
+    #-------------------------------------------------------------#
+    def ajoutDefinitionMC(self,etape,listeAvant,nomDuMC,typ,**args):
+    #-------------------------------------------------------------#
+        definitionEtape=getattr(self.jdc.cata[0],etape)
+        ouChercher=definitionEtape
+        for k in listeAvant : 
+            ouChercher=ouChercher.entites[k]
+        from Accas import A_SIMP
+        Nouveau=A_SIMP.SIMP(typ,**args)
+        Nouveau.pere=ouChercher
+        Nouveau.nom=nomDuMC
+        Nouveau.ordre_mc=[]
+        ouChercher.entites[nomDuMC]=Nouveau
+        ouChercher.ordre_mc.append(nomDuMC)
+        self.dicoNouveauxMC[nomDuMC]=('ajoutDefinitionMC',etape,listeAvant,nomDuMC,typ,args)
+        #print self.dicoNouveauxMC
+
+    #----------------------------------------------------#
+    def changeIntoMCandSet(self,etape,MCFils,into,valeurs):
+    #----------------------------------------------------#
+        monMC=etape.get_child(MCFils,restreint="oui")
+        if monMC== None : monMC= etape.addentite(MCFils)
+        monMC.definition.into=into
+        monMC.valeur=valeurs
+        monMC.val=valeurs
+        monMC.state='changed'
+        monMC.isvalid() 
 
     #-------------------------------------#
     def ajoutVersionCataDsJDC(self,txt):
 
     #-------------------------------------#
     def ajoutVersionCataDsJDC(self,txt):
@@ -1158,6 +1489,36 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         return ligne
 
 
         return ligne
 
 
+    #---------------------------#
+    def _new_CF(self):
+    #---------------------------#
+        texte="CONDUITE_FORCEE();"
+        return texte
+
+
+    #---------------------------#
+    def _newTELEMAC(self):
+    #---------------------------#
+        #texte="INITIALIZATION();BOUNDARY_CONDITIONS();GENERAL_PARAMETERS();PHYSICAL_PARAMETERS();NUMERICAL_PARAMETERS();"
+        texte=""
+        return texte
+
+    #---------------------------#
+    def _newPSEN(self):
+    #---------------------------#
+        texte="DIRECTORY() ; PSSE_PARAMETERS() ; SIMULATION() ; sansnom=DISTRIBUTION() ; sansnom=DISTRIBUTION() ; CORRELATION() ;"
+        #texte=""
+        return texte
+
+    #---------------------------#
+    def _newPSEN_N1(self):
+    #---------------------------#
+        #texte="CASE_SELECTION() ; CONTINGENCY_OPTIONS() ; OUTPUT_OPTIONS() ; "
+        texte="CASE_SELECTION() ; N_PROCESSING_OPTIONS() ; CONTINGENCY_OPTIONS() ; CONTINGENCY_SELECTION(); CONTINGENCY_PROCESSING(); "
+        return texte
+
+    #---------------------------#
+
     #---------------------------#
     def _newZCRACKS(self):
     #---------------------------#
     #---------------------------#
     def _newZCRACKS(self):
     #---------------------------#
@@ -1176,7 +1537,8 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
       QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
                         caption='Fichier Med',
                         filter=extensions)
       QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
                         caption='Fichier Med',
                         filter=extensions)
-      self.fichierMED=str(QSfichier.toLatin1())
+      if monEnvQT5 : QSfichier=QSfichier[0]
+      self.fichierMED=QSfichier
       from acquiertGroupes import getGroupes
       erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
       if erreur != "" : print "a traiter"
       from acquiertGroupes import getGroupes
       erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
       if erreur != "" : print "a traiter"
@@ -1205,7 +1567,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     #---------------------------#
 
       QSfichier=self.openfile.selectedFiles()[0]
     #---------------------------#
 
       QSfichier=self.openfile.selectedFiles()[0]
-      self.fichierMED=str(QSfichier.toLatin1())
+      self.fichierMED=str(QSfichier)
       from acquiertGroupes import getGroupes
       erreur,self.listeGroupes,self.nomMaillage=getGroupes(self.fichierMED)
       if erreur != "" : print "a traiter"
       from acquiertGroupes import getGroupes
       erreur,self.listeGroupes,self.nomMaillage=getGroupes(self.fichierMED)
       if erreur != "" : print "a traiter"
@@ -1218,6 +1580,81 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
       self.nomMaillage="A_partir_de_SMESH"
       self.openfile.close()
 
       self.nomMaillage="A_partir_de_SMESH"
       self.openfile.close()
 
+    #-------------------------------------
+    def saveSplitterSizes(self,event=None):
+    #------------------------------------
+      if self.inhibeSplitter : return
+      if not hasattr(self,'splitter') : return
+      if self.splitterSizes[2] != 0 : self.oldSizeWidgetOptionnel = self.splitterSizes[2]
+      #print  self.splitterSizes
+      #print self.splitter.sizes()
+      # PNPNPNPN parfoir self.splitter.sizes() a une longueur de 4...
+      nbAGarder=len(self.splitter.sizes())
+      if nbAGarder > 3 : nbAGarder=3
+      for i in range(nbAGarder):
+         self.splitterSizes[i] = self.splitter.sizes()[i]
+         self.splitter.widget(i).resizeEvent=self.saveSplitterSizes
+      #print self.splitter.sizes()
+
+
+    #-----------------------------------------
+    def restoreSplitterSizes(self,nbWigdet=3):
+    #----------------------------------------
+      self.inhibeSplitter = 1
+      self.i+=1
+      if not(hasattr(self,'splitter')) : return
+      newSizes=self.splitterSizes[:nbWigdet]
+      self.splitter.setSizes(newSizes)
+      self.inhibeSplitter = 0
+   
+    #------------------------
+    def fermeOptionnel(self):
+    #------------------------
+      if self.widgetOptionnel == None : return
+
+      self.inhibeSplitter=1
+      self.splitterSizes[1] = self.splitterSizes[1] + self.splitterSizes[2]
+      if self.splitterSizes[2]!=0 : self.oldSizeWidgetOptionnel = self.splitterSizes[2]
+      self.splitterSizes[2]=0
+
+      self.widgetOptionnel.setParent(None)
+      self.widgetOptionnel.close()
+      self.widgetOptionnel.deleteLater()
+      self.widgetOptionnel=None
+      self.inhibeSplitter=0
+      self.restoreSplitterSizes(2)
+      
+    #------------------------
+    def ajoutOptionnel(self):
+    #------------------------
+      #print "ajoutOptionnel"
+      #print self.splitterSizes
+      self.splitterSizes[2] = self.oldSizeWidgetOptionnel
+      self.splitterSizes[1] = self.splitterSizes[1] - self.splitterSizes[2]
+      self.inhibeSplitter=0
+      self.restoreSplitterSizes(3)
+
+
+    #-----------------------------
+    def getTreeIndex(self,noeud):
+    #----------------------------
+      indexNoeud=-1
+      if noeud in noeud.treeParent.children :
+          indexNoeud=noeud.treeParent.children.index(noeud)
+      else :
+          if hasattr(noeud,'vraiParent') :
+              noeudVrai = noeud
+              noeudVraiParent = noeud.vraiParent
+              while noeudVraiParent != noeud.treeParent and hasattr(noeudVraiParent,'vraiParent') :
+                  noeudVrai = noeudVraiParent
+                  noeudVraiParent = noeudVraiParent.vraiParent
+                  pass
+              if noeudVraiParent == noeud.treeParent :
+                  indexNoeud=noeud.treeParent.children.index(noeudVrai)
+                  pass
+              pass
+          pass
+      return indexNoeud
 
 if __name__ == "__main__":
     self.code='ASTER'
 
 if __name__ == "__main__":
     self.code='ASTER'