Salome HOME
synchronisation avec Yoann
[tools/eficas.git] / InterfaceQT4 / editor.py
old mode 100644 (file)
new mode 100755 (executable)
index df4637a..ed534c9
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+   from builtins import str
+   from builtins import range
+except : pass
+
 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 *
+
+import six
+from six.moves import range
+from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter
+from PyQt5.QtGui import QPalette
+from PyQt5.QtCore import QProcess, QFileInfo, QTimer, Qt, QDir, QSize
 import time
 import time
+import pdb
 from datetime import date
 from Extensions.i18n import tr
 
 from datetime import date
 from Extensions.i18n import tr
 
+import traceback
 
 # Modules Eficas
 
 
 # Modules Eficas
 
@@ -35,15 +47,17 @@ from Editeur        import session
 from Editeur        import comploader
 from Editeur        import Objecttreeitem
 from desBaseWidget  import Ui_baseWidget
 from Editeur        import comploader
 from Editeur        import Objecttreeitem
 from desBaseWidget  import Ui_baseWidget
-import browser
-import readercata
-import qtCommun
+from InterfaceQT4.monViewTexte   import ViewText
+from monWidgetCreeParam import MonWidgetCreeParam 
+from . import browser
+from . import readercata
 
 
-DictExtensions= {"MAP" : ".map"}
+DictExtensions= {"MAP" : ".map", "TELEMAC" : '.comm'}
 
 
+    
 
 
 
 
-class JDCEditor(Ui_baseWidget,QtGui.QWidget):
+class JDCEditor(Ui_baseWidget,QWidget):
 # ----------------------------------------- #
     """
        Editeur de jdc
 # ----------------------------------------- #
     """
        Editeur de jdc
@@ -52,10 +66,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,38 +82,63 @@ 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
+        self.nodeEnCours=None
          
         if appli != None :
            self.salome =  self.appliEficas.salome
         else :
            self.salome=0
          
         if appli != None :
            self.salome =  self.appliEficas.salome
         else :
            self.salome=0
-           print "dans JDC pas d appli ????????"
+           print ("dans JDC pas d appli ????????")
 
         # ces attributs sont mis a jour par definitCode appelee par newEditor
 
         # 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.code   = self.appliEficas.CONFIGURATION.code
+        self.initSplitterSizes()
+
+        #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.closeArbre=self.appliEficas.CONFIGURATION.closeArbre
+        self.affiche=self.appliEficas.CONFIGURATION.affiche
+        self.afficheOptionnelVide=self.appliEficas.CONFIGURATION.afficheOptionnelVide
+        self.nombreDeBoutonParLigne = self.appliEficas.CONFIGURATION.nombreDeBoutonParLigne
+        self.dicoImages = self.appliEficas.CONFIGURATION.dicoImages
+        self.simpleClic = self.appliEficas.CONFIGURATION.simpleClic
+        #self.taille = self.appliEficas.taille
+
+        #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.widgetTree.close()
            self.widgetTree=None
-           self.appliEficas.resize(1400,self.appliEficas.height())
-        else :
-           self.appliEficas.resize(2000,self.appliEficas.height())
+        if self.closeArbre: self.fermeArbre()
 
         self.version_code = session.d_env.cata
 
 
         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
         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.liste_simp_reel=[]
         self.ihm="QT"
 
         self.format =  self.appliEficas.format_fichier
 
         self.dict_reels={}
         self.liste_simp_reel=[]
         self.ihm="QT"
+        self.dicoNouveauxMC={}
+        self.dicoNouveauxFact={}
 
         nameConf='configuration_'+self.code
         configuration=__import__(nameConf)
 
         nameConf='configuration_'+self.code
         configuration=__import__(nameConf)
@@ -111,6 +155,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,13 +174,18 @@ 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','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','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.nouveau=0
         if self.fichier is not None:        #  fichier jdc fourni
@@ -145,7 +195,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
                try :
                    self.jdc = self.readFile(self.fichier)
                except :
                try :
                    self.jdc = self.readFile(self.fichier)
                except :
-                   print "mauvaise lecture"
+                   print ("mauvaise lecture")
             else :
                self.jdc=jdc
             if self.jdc is not None and units is not None:
             else :
                self.jdc=jdc
             if self.jdc is not None and units is not None:
@@ -160,15 +210,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
+            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:
@@ -176,11 +228,122 @@ 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.adjustSize()
+
+
+    #-------------------#  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):
+    #-------------------#
+      
+
+      self.saveFile()
+      path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
+      sys.path.append(path1)
+
+      if not(self.jdc.isvalid()):
+         QMessageBox.information( self, tr( "Unvalid JDC"),tr("incorrect keywords will be ignored"))
+      if 'dicoImbrique' in generator.plugins:
+         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'
+         fileDico =  os.path.join(path1, 'dicoN1.py') #r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
+         f = open( str(fileDico), 'w')
+         f.write("Dico =" + str(dico) )
+         f.close()
+         ###
+         
+      
+      #print ('in runPSEN_N1', dico)
+      from Run import run 
+      run(dico)
+      #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):
+    #-------------------#
+
+      path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
+      sys.path.append(path1)
+
+
+      if 'dicoImbrique' in generator.plugins:
+         self.generator=generator.plugins['dicoImbrique']()
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.get_Dico() #generator.Dico
+
+
+         for k in dico['CONTINGENCY_PROCESSING']:
+             #print (k)
+             if k[0:19] == 'Component_List_For_' or k[0:21] =='Contingency_List_For_' :
+                newK=k.replace('___',' ')
+                l="'"+str(newK)+"'"
+                dico['CONTINGENCY_PROCESSING'][l]=dico['CONTINGENCY_PROCESSING'][k]
+                del dico['CONTINGENCY_PROCESSING'][k]
+
+         ###to delete
+         fileDico =  os.path.join(path1, 'dicoN1_process.py')
+         f = open( str(fileDico), 'w')
+         f.write("Dico =" + str(dico) )
+         f.close()
+         ###
+         return dico
+
+        #return self.get_Dico()
+
+    #-------------------#  Pour execution avec output et error dans le bash
+    def process_VP(self):
+    #-------------------#
+      if 'dicoImbrique' in generator.plugins:
+         self.generator=generator.plugins['dicoImbrique']()
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.get_Dico() #generator.Dico
+         return dico
+
+   
+    #--------------------------------#
+    def ajoutCommentaire(self):
+    #--------------------------------#
+        if self.tree.selectedItems()==[] :
+          QMessageBox.warning( self, tr("Pas de noeud selectionne"),tr("Selectionnez un Noeud \nLe commentaire sera place apres le noeud selectionne"))
+          return 
+        noeudAvantCommentaire=self.tree.selectedItems()[0]
+        if noeudAvantCommentaire ==self.tree.racine : 
+            self.tree.racine.append_child("COMMENTAIRE",pos=0)
+            return
+        noeudAvantCommentaire.addComment(True)
+        
+
+
     #--------------------------------#
     def _newJDC( self ,units = None):
     #--------------------------------#
     #--------------------------------#
     def _newJDC( self ,units = None):
     #--------------------------------#
@@ -191,8 +354,15 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         CONTEXT.unset_current_step()
 
         texte=""
         CONTEXT.unset_current_step()
 
         texte=""
-        #if self.code == "CARMELCND" : texte=self._newJDCCND()
+        if self.code == "CARMELCND" : texte=self._newJDCCND()
         if self.code == "ZCRACKS" : texte=self._newZCRACKS()
         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 hasattr(self.readercata.cata[0],'TEXTE_NEW_JDC') : texte=self.readercata.cata[0].TEXTE_NEW_JDC
+
+        #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,
@@ -248,7 +418,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         Public slot to read the text from a file.
         @param fn filename to read from (string or QString)
         """
         Public slot to read the text from a file.
         @param fn filename to read from (string or QString)
         """
-        fn = unicode(fn)
+        fn = six.text_type(fn)
 
         # ------------------------------------------------------------------------------------
         #                         charge le JDC
 
         # ------------------------------------------------------------------------------------
         #                         charge le JDC
@@ -256,7 +426,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
 
         jdcName=os.path.basename(fn)
         # Il faut convertir le contenu du fichier en fonction du format
 
         jdcName=os.path.basename(fn)
         # Il faut convertir le contenu du fichier en fonction du format
-        if convert.plugins.has_key( self.appliEficas.format_fichier_in ):
+        if self.appliEficas.format_fichier_in in convert.plugins:
              # Le convertisseur existe on l'utilise
              #appli = self
              p=convert.plugins[self.appliEficas.format_fichier_in]()
              # Le convertisseur existe on l'utilise
              #appli = self
              p=convert.plugins[self.appliEficas.format_fichier_in]()
@@ -308,7 +478,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     #-----------------------#
 
         # Il faut convertir le contenu du fichier en fonction du format
     #-----------------------#
 
         # Il faut convertir le contenu du fichier en fonction du format
-        if convert.plugins.has_key(self.format):
+        if self.format in convert.plugins :
             # Le convertisseur existe on l'utilise
             p=convert.plugins[self.format]()
             p.readfile(file)
             # Le convertisseur existe on l'utilise
             p=convert.plugins[self.format]()
             p.readfile(file)
@@ -322,12 +492,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 = qtCommun.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()
     #
 
@@ -344,7 +512,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     #----------------------------------------------#
     def _viewTextExecute(self, txt, prefix, suffix):
     #----------------------------------------------#
     #----------------------------------------------#
     def _viewTextExecute(self, txt, prefix, suffix):
     #----------------------------------------------#
-        self.w = qtCommun.ViewText( self.QWParent )
+        self.w = ViewText( self.QWParent )
         self.w.setWindowTitle( "execution" )
         self.monExe=QProcess(self.w)
         pid=self.monExe.pid()
         self.w.setWindowTitle( "execution" )
         self.monExe=QProcess(self.w)
         pid=self.monExe.pid()
@@ -352,9 +520,9 @@ 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'
+        self.monExe.readyReadStandardOutput.connect( self.readFromStdOut)
+        self.monExe.readyReadStandardError.connect( self.readFromStdErr)
+        exe='sh ' + nomFichier
         self.monExe.start(exe)
         self.monExe.closeWriteChannel()
         self.w.exec_()
         self.monExe.start(exe)
         self.monExe.closeWriteChannel()
         self.w.exec_()
@@ -364,20 +532,41 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         except :
           pass
 
         except :
           pass
 
-
     def readFromStdErr(self):
         a=self.monExe.readAllStandardError()
     def readFromStdErr(self):
         a=self.monExe.readAllStandardError()
-        self.w.view.append(QString.fromUtf8(a.data(),len(a))) ;
+        self.w.view.append(str(a.data()))
 
     def readFromStdOut(self) :
 
     def readFromStdOut(self) :
+        a=self.monExe.readAllStandardOutput()
+        self.w.view.append(str(a.data()))
+
+    def readFromStdErrQT4(self):
+        a=self.monExe.readAllStandardError()
+        self.w.view.append(QString.fromUtf8(a.data(),len(a))) ;
+
+    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 generDico(self):
+    #-----------------------#
+       if 'dico' in generator.plugins:
+         self.generator=generator.plugins['dico']()
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.generator.Dico
+         return dico
 
 
+    #-----------------------#
+    def gestionParam(self):
+    #-----------------------#
+        w = MonWidgetCreeParam( self)
+        w.show()
 
     #-----------------------#
     def viewJdcSource(self):
     #-----------------------#
 
     #-----------------------#
     def viewJdcSource(self):
     #-----------------------#
+        if self.fichier == None : return
         f=open(self.fichier,'r')
         texteSource=f.read()
         f.close()
         f=open(self.fichier,'r')
         texteSource=f.read()
         f.close()
@@ -392,9 +581,17 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     #-----------------------#
     def viewJdcRapport(self):
     #-----------------------#
     #-----------------------#
     def viewJdcRapport(self):
     #-----------------------#
-        strRapport = unicode( self.jdc.report() )
+        strRapport = six.text_type( 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):
     #----------------#
@@ -410,10 +607,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):
@@ -421,6 +618,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):
     #-------------------#
@@ -454,21 +662,37 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     #---------------------#
     def handleRechercher(self):
     #---------------------#
     #---------------------#
     def handleRechercher(self):
     #---------------------#
-      from monRecherche import DRecherche
+      from .monRecherche import DRecherche
       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):
@@ -512,32 +736,23 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
                       tr("Copie impossible"),
                       tr("Veuillez selectionner un seul objet : la copie se fera apres le noeud selectionne"))
           return
                       tr("Copie impossible"),
                       tr("Veuillez selectionner un seul objet : la copie se fera apres le noeud selectionne"))
           return
+      noeudOuColler=self.node_selected[0]
 
       if len(self.QWParent.noeud_a_editer)!=1:
 
       if len(self.QWParent.noeud_a_editer)!=1:
-         self.handleEditPasteMultiple()
+         #self.handleEditPasteMultiple()
+         QMessageBox.information( self, tr("Copie impossible"), tr("Aucun Objet n a ete copie ou coupe"))
          return
 
          return
 
-      noeudOuColler=self.node_selected[0]
-      pos='after'
-      if noeudOuColler == self.tree.racine:
-         indexNoeudOuColler=0
-         pos='before'
-      else :
-         indexNoeudOuColler=noeudOuColler.treeParent.children.index(noeudOuColler)
-
-      try :
-       noeudACopier=self.QWParent.noeud_a_editer[0]
-       indexNoeudACopier=noeudACopier.treeParent.children.index(noeudACopier)
-      except :
-       QMessageBox.information( self, tr("Copie impossible"), tr("Aucun Objet n a ete copie ou coupe"))
-       return
+      noeudACopier=self.QWParent.noeud_a_editer[0]
 
       if (self.QWParent.edit != "couper"):
 
       if (self.QWParent.edit != "couper"):
+        #print   (noeudOuColler.item.parent.get_child(noeudOuColler.item.nom)) 
         try:
            if noeudOuColler == self.tree.racine :
         try:
            if noeudOuColler == self.tree.racine :
-              child=noeudOuColler.doPastePremier(noeudACopier)
+               child=noeudOuColler.doPastePremier(noeudACopier)
            else :
            else :
-              child=noeudACopier.doPaste(noeudOuColler,pos)
+               child=noeudACopier.doPaste(noeudOuColler,'after')
+
            if child==None or child==0:
                QMessageBox.critical( self,tr( "Copie refusee"),tr('Eficas n a pas reussi a copier l objet'))
                self.message = ''
            if child==None or child==0:
                QMessageBox.critical( self,tr( "Copie refusee"),tr('Eficas n a pas reussi a copier l objet'))
                self.message = ''
@@ -563,13 +778,14 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
       # si possible on renomme l objet comme le noeud couper
 
       if (self.QWParent.edit == "couper"):
       # si possible on renomme l objet comme le noeud couper
 
       if (self.QWParent.edit == "couper"):
-         #try :
+         print ('je pass la')
          if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
            QMessageBox.critical( self, tr("Deplacement refuse"),tr('Deplacement refuse entre 2 fichiers. Seule la copie est autorisee '))
 
          #if 1:
          try :
          if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
            QMessageBox.critical( self, tr("Deplacement refuse"),tr('Deplacement refuse entre 2 fichiers. Seule la copie est autorisee '))
 
          #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()
 
@@ -669,23 +885,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
         """
 
         @return flag indicating success
         """
 
-        fn = unicode(fn)
-
+        fn = six.text_type(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:
@@ -695,29 +911,36 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
             txt=self.ajoutVersionCataDsJDC(txt)
             checksum=self.get_checksum(txt)
             txt=txt+checksum
             txt=self.ajoutVersionCataDsJDC(txt)
             checksum=self.get_checksum(txt)
             txt=txt+checksum
+        if self.code=="TELEMAC" : return 1
         try:
         try:
-            f = open(fn, 'wb')
+            f = open(fn, 'w')
             f.write(txt)
             f.close()
             return 1
             f.write(txt)
             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)))
+        except IOError as 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):
-    #-------------------------------------#
-      if self.code == "MAP" and not(generator.plugins.has_key(format)): format = "MAP"
-      if generator.plugins.has_key(format):
+    #-----------------------------------------------------------#
+    def get_text_JDC(self,format,pourRun=0,formatLigne="beautifie"):
+    #-----------------------------------------------------------#
+      if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+      if format in generator.plugins:
+         
          # 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
             if pourRun : jdc_formate=self.generator.textePourRun
-         except ValueError,e:
+            if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
+         except ValueError as e:
             QMessageBox.critical(self, tr("Erreur a la generation"),str(e))
             QMessageBox.critical(self, tr("Erreur a la generation"),str(e))
+            return
+
          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"))
          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"))
@@ -730,17 +953,32 @@ 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 'dicoImbrique' in generator.plugins:
+         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
-      if fonction in JDCEditor.__dict__.keys(): apply(JDCEditor.__dict__[fonction],(self,))
+      #print fonction
+      if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
 
     #------------#
     def saveRun(self):
     #------------#
       fonction="saveRun"+self.code
 
     #------------#
     def saveRun(self):
     #------------#
       fonction="saveRun"+self.code
-      if fonction in JDCEditor.__dict__.keys(): apply(JDCEditor.__dict__[fonction],(self,))
+      if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
 
     #---------------#
     def runMAP(self):
 
     #---------------#
     def runMAP(self):
@@ -774,13 +1012,13 @@ 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
-      except Exception, e:
-          print traceback.print_exc()
+          #try:
+          #  commande="rm  "+self.fichierMapInput
+          #   os.system(commande)
+          #except :
+          #   pass
+      except Exception as e:
+          print((traceback.print_exc()))
 
     #-------------------#
     def runZCRACKS(self):
 
     #-------------------#
     def runZCRACKS(self):
@@ -800,8 +1038,8 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
           commande="more "
           textePython=(commande + self.fichierZcracksInput)
           self._viewTextExecute( textePython,"run_zcracks",".sh")
           commande="more "
           textePython=(commande + self.fichierZcracksInput)
           self._viewTextExecute( textePython,"run_zcracks",".sh")
-      except Exception, e:
-          print traceback.print_exc()
+      except Exception as e:
+          print((traceback.print_exc()))
 
     #-------------------#
     def runCARMELCND(self):
 
     #-------------------#
     def runCARMELCND(self):
@@ -824,10 +1062,6 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
       f.close()
       commande="xterm -e sh "+nomFichier +"\n"
       os.system(commande)
       f.close()
       commande="xterm -e sh "+nomFichier +"\n"
       os.system(commande)
-      #try :
-      #    self._viewTextExecute( textePython,"carmel_run",".sh")
-      #except Exception, e:
-      #    print traceback.print_exc()
 
     #-------------------#
     def runCarmelCS(self):
 
     #-------------------#
     def runCarmelCS(self):
@@ -835,17 +1069,17 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
       try :
           commande="runSession pilotyacsCS.py"
           os.system(commande)
       try :
           commande="runSession pilotyacsCS.py"
           os.system(commande)
-      except Exception, e:
-          print traceback.print_exc()
+      except Exception as e:
+          print((traceback.print_exc()))
 
     #-----------------------------------------------------#
     def determineNomFichier(self,path,extension):
     #-----------------------------------------------------#
 
     #-----------------------------------------------------#
     def determineNomFichier(self,path,extension):
     #-----------------------------------------------------#
-      if DictExtensions.has_key(self.appli.code) :
+      if self.appli.code in DictExtensions:
          chaine1="JDC (*"+DictExtensions[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);;"
@@ -854,16 +1088,20 @@ 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)
+      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,
-                   tr("Sauvegarde du Fichier"),
-                   tr("Le fichier <b>%s</b> existe deja.",str(fn)),
-                   tr("&Ecraser"),
-                   self.trUtf8("&Abandonner"))
+           msgBox = QMessageBox(self)
+           msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
+           msgBox.setText(tr("Le fichier <b>%s</b> existe deja.", six.text_type(fn)))
+           msgBox.addButton(tr("&Ecraser"),0)
+           msgBox.addButton(tr("&Abandonner"),1)
+           abort=msgBox.exec_()
            if abort == 1 :  return (0, "")
       return (1,fn)
 
            if abort == 1 :  return (0, "")
       return (1,fn)
 
@@ -884,7 +1122,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 != "" :
@@ -904,15 +1142,13 @@ 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 avant=="&Open": b.setText("Save")
+        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())
+        fn=str(monDialog.selectedFiles()[0])
         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"
@@ -928,6 +1164,13 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         (output, err) = p.communicate()
 
 
         (output, err) = p.communicate()
 
 
+    #-----------------#
+    def saveRunPSEN(self):
+    #-----------------#
+        #print ("saveRunPSEN")
+        self.saveFile()
+
+
     #-----------------------------------------#
     def cherche_Groupes(self):
     #-----------------------------------------#
     #-----------------------------------------#
     def cherche_Groupes(self):
     #-----------------------------------------#
@@ -939,7 +1182,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
     #-----------------------------------------#
         dicoCourant={}
         format =  self.appliEficas.format_fichier
     #-----------------------------------------#
         dicoCourant={}
         format =  self.appliEficas.format_fichier
-        if generator.plugins.has_key(format):
+        if format in generator.plugins:
            # Le generateur existe on l'utilise
            self.generator=generator.plugins[format]()
            jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
            # Le generateur existe on l'utilise
            self.generator=generator.plugins[format]()
            jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
@@ -961,9 +1204,47 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
         #else :
            pass
 
         #else :
            pass
 
-    #-----------------------------------------#
-    def saveFile(self, path = None, saveas= 0):
-    #-----------------------------------------#
+    #-----------------------------------------------------------------#
+    def saveFileLegerAs(self, fileName = None) :
+    #-----------------------------------------------------------------#
+        if fileName != None :
+           self.fichier = fileName
+           return self.saveFileLeger()
+        return self.saveFileLeger()
+
+    #-----------------------------------------------------------------#
+    def saveFileLeger(self, path = None, saveas= 0,formatLigne="beautifie"):
+    #-----------------------------------------------------------------#
+        extension='.casR'
+        fn = self.fichier
+        #saveas=True # Pour forcer le nom
+        self.generator=generator.plugins[self.format]()
+        if self.fichier is None or saveas:
+          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)
+          if fn== '' : return (0, None)
+
+          ulfile = os.path.abspath(six.text_type(fn))
+          self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
+          fn = six.text_type(QDir.toNativeSeparators(fn))
+
+        self.fichier = os.path.splitext(fn)[0]+extension
+
+        if hasattr(self.generator, "writeLeger"):
+            self.generator.writeLeger(self.fichier,self.jdc,config=self.appliEficas.CONFIGURATION,appli=self.appliEficas)
+
+        if self.salome : self.appliEficas.addJdcInSalome( self.fichier)
+
+        self.modified = 0
+        nouveauTitre=self.titre+"              "+str(os.path.basename(self.fichier))
+        self.appliEficas.setWindowTitle(nouveauTitre)
+        return (1, self.fichier)
+
+    #-----------------------------------------------------------------#
+    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.
 
@@ -972,12 +1253,11 @@ 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
 
-        extension='.py'
-        if DictExtensions.has_key(self.appli.code) :
+        if self.appli.code in DictExtensions :
            extension=DictExtensions[self.appli.code]
         else :
            extension='.comm'
            extension=DictExtensions[self.appli.code]
         else :
            extension='.comm'
@@ -985,19 +1265,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))
+          ulfile = os.path.abspath(six.text_type(fn))
           self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
           self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
-          fn = unicode(QDir.convertSeparators(fn))
+          fn = six.text_type(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:
@@ -1011,6 +1291,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)
+        elif 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)
@@ -1020,6 +1302,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):
     #----------------------------------------------#
@@ -1033,7 +1323,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")
 
 
 
 
 
 
@@ -1056,16 +1346,17 @@ 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, " ")
+        fn=fn[0]
 
 
-        ulfile = os.path.abspath(unicode(fn))
+        ulfile = os.path.abspath(six.text_type(fn))
         self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
 
         # On utilise le convertisseur defini par format_fichier
         self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
 
         # On utilise le convertisseur defini par format_fichier
@@ -1078,18 +1369,293 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
             jdcText = ''
         return ulfile, jdcText
 
             jdcText = ''
         return ulfile, jdcText
 
-    #-------------------------------#
+    #-----------------------------------#
     def updateJdc(self, itemApres,texte):
     def updateJdc(self, itemApres,texte):
-    #--------------------------------#
+    #------------------------------------#
+    # ajoute une etape  de JdC a partir d un texte
         monItem=itemApres
         etape=monItem.item.object
         monItem=itemApres
         etape=monItem.item.object
-
         CONTEXT.set_current_step(etape)
         etape.build_includeInclude(texte)
         self.tree.racine.build_children()
 
         CONTEXT.set_current_step(etape)
         etape.build_includeInclude(texte)
         self.tree.racine.build_children()
 
+    #-----------------------------------#
+    def updateJdcEtape(self, itemApres,texte):
+    #------------------------------------#
+    # ajoute une etape  de JdC a partir d un texte
+        monItem=itemApres
+        etape=monItem.item.object
+        CONTEXT.set_current_step(etape)
+        etape.build_includeEtape(texte)
+        self.tree.racine.build_children()
+
+
+    #-------------------------------------#
+    def deleteEtape(self,etape):
+    #-------------------------------------#
+    # dans le JDC
+        self.jdc.suppentite(etape)
+
+    #-------------------------------------#
+    def deleteMC(self,etape,MCFils,listeAvant=()):
+    #-------------------------------------#
+    # dans le JDC
+        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=()):
+    #-------------------------------------#
+    # dans le JDC
+        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 ajoutMCFact(self,etape,MCFils,listeAvant=()):
+    #----------------------------------------------#
+    # dans le JDC
+        print ('ajoutMCFact')
+        ouChercher=etape
+        print (ouChercher)
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+              print (mot)
+              print (ouChercher)
+        monMC=etape.get_child(ouChercher,restreint="oui")
+        if monMC== None : monMC= ouChercher.addentite(MCFils)
+        monMC.isvalid()
 
 
+    #-------------------------------------#
+    def getValeur(self,nomEtape,MCFils,listeAvant=()):
+    #-------------------------------------#
+    # dans le JDC
+
+        ouChercher=None
+        for e in self.jdc.etapes:
+            if e.nom == nomEtape : ouChercher=e; break
+        if ouChercher==None : return None
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+              #print (mot, ouChercher)
+              if ouChercher==None : return None
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        if monMC== None : return None
+        return monMC.valeur
+
+    #-----------------------------------------------------------#
+    def setValeur(self,nomEtape,MCFils,valeur,listeAvant=()):
+    #--------------------------------------------------------#
+    # dans le JDC
+
+        ouChercher=None
+        for e in self.jdc.etapes:
+            if e.nom == nomEtape : ouChercher=e; break
+        if ouChercher==None : return None
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+              #print (mot, ouChercher)
+              if ouChercher==None : return None
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        monMC.set_valeur(valeur)
+        monMC.isvalid()
+
+    #-----------------------------------------------------------#
+    def changeIntoMC(self,etape,MCFils,valeurs, listeAvant=()):
+    #-----------------------------------------------------------#
+    # dans le JDC
+        ouChercher=etape
+        if isinstance (etape, str):
+           ouChercher=None
+           for e in self.jdc.etapes:
+              if e.nom == etape : ouChercher=e; break
+        if ouChercher==None : return
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+              if ouChercher==None : return 
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        if monMC== None : monMC= ouChercher.addentite(MCFils)
+
+        monMC.definition.into=valeurs
+        from Noyau.N_VALIDATOR import  IntoProtocol
+        monMC.definition.intoProto = IntoProtocol("into", into=monMC.definition.into, val_min=monMC.definition.val_min, val_max=monMC.definition.val_max)
+        monMC.state='changed'
+        monMC.isvalid()
+
+    #-------------------------------------------------------------------#
+    def reCalculeValiditeMCApresChgtInto(self,nomEtape,MCFils,listeAvant=()):
+    #-------------------------------------------------------------------#
+    # dans le JDC
+        for e in self.jdc.etapes:
+            if e.nom == nomEtape : ouChercher=e; break
+        
+        for mot in listeAvant :
+            try :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+            # Le mot clef n est pas la
+            except : return 0
+        try :
+           monMC=ouChercher.get_child(MCFils,restreint="oui")
+        # Le mot clef n est pas la
+        except : return 0
+        if monMC == None : return 0
+
+        if hasattr(monMC.definition,'into') :
+           if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
+           else : maListeDeValeur=monMC.definition.into
+        else :
+           return 0
+        
+        monMC.state='changed'
+        return 1
+
+    #-------------------------------------#
+    def changeDefautDefMC(self,nomEtape,listeMC,valeurs):
+    #-------------------------------------#
+    # dans le MDD
+
+        #if isinstance (etape, str):
+        #  for e in self.jdc.etapes:
+        #    if e.nom == etape : etape=e; break
+        #if etape == None : return
+        definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+        ouChercher=definitionEtape
+        if len(listeMC) > 1 :
+
+           for mc in listeMC[0:-1]:
+             mcfact=ouChercher.entites[mc]
+             ouChercher=mcfact
+           
+        mcAccas=ouChercher.entites[listeMC[-1]]
+        mcAccas.defaut=valeurs
+        return 1
+
+    #------------------------------------------------#
+    def changeIntoDefMC(self,nomEtape,listeMC,valeurs):
+    #------------------------------------------------#
+    # dans le MDD
+        definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+        ouChercher=definitionEtape
+
+        if len(listeMC) > 1 :
+           for mc in listeMC[0:-1]:
+             mcfact=ouChercher.entites[mc]
+             ouChercher=mcfact
+        mcAccas=ouChercher.entites[listeMC[-1]]
+
+        if hasattr(mcAccas,'into') : oldValeurs=mcAccas.into
+        else : oldValeurs=None
+        if oldValeurs==valeurs : return 0
+
+        mcAccas.into=valeurs
+        from Noyau.N_VALIDATOR import  IntoProtocol
+        mcAccas.intoProto = IntoProtocol("into", into=valeurs, val_min=mcAccas.val_min, val_max=mcAccas.val_max)
+        return 1
+
+    #-------------------------------------------------------------#
+    def deleteDefinitionMC(self,etape,listeAvant,nomDuMC):
+    #-------------------------------------------------------------#
+    # dans le MDD
+        #print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC
+        if isinstance (etape, str):
+          for e in self.jdc.etapes:
+            if e.nom == etape : etape=e; break
+        if etape == None : return
+        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,nomEtape,listeAvant,nomDuMC,typ,**args):
+    #-------------------------------------------------------------#
+    # dans le MDD
+        definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+        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',nomEtape,listeAvant,nomDuMC,typ,args)
+        #print self.dicoNouveauxMC
+
+    #---------------------------------------------------------------------#
+    def ajoutDefinitionMCFact(self,nomEtape,listeAvant,nomDuMC,listeMC,**args):
+    #---------------------------------------------------------------------#
+    # dans le MDD
+        print ('ajoutDefinitionMCFact', nomDuMC)
+        definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+        ouChercher=definitionEtape
+        for k in listeAvant : 
+            ouChercher=ouChercher.entites[k]
+        from Accas import A_SIMP
+        for mc in listeMC :
+            nomMC=mc[0]
+            typMC=mc[1]
+            argsMC=mc[2]
+            nouveauMC=A_SIMP.SIMP(typMC,**argsMC)
+            nouveauMC.nom=nomMC
+            args[nomMC]=nouveauMC
+        from Accas import A_FACT
+        nouveauFact=A_FACT.FACT(**args)
+        nouveauFact.pere=ouChercher
+        nouveauFact.nom=nomDuMC
+        from Editeur.autre_analyse_cata import traite_entite
+        traite_entite(nouveauFact,[])
+        ouChercher.entites[nomDuMC]=nouveauFact
+        ouChercher.ordre_mc.append(nomDuMC)
+        self.dicoNouveauxFact[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,listeMC,args)
+        #print self.dicoNouveauxMC
+
+    #----------------------------------------------------#
+
+    #----------------------------------------------------#
+    def changeIntoMCandSet(self,etape,listeMC,into,valeurs):
+    #----------------------------------------------------#
+    # dans le MDD et le JDC
+
+        self.changeIntoDefMC(etape,listeMC,into)
+
+        if isinstance (etape, str):
+          for e in self.jdc.etapes:
+            if e.nom == etape : etape=e; break
+        if etape == None : return
+
+        ouChercher = etape
+        for mot in listeMC[:-1] :
+            ouChercher=ouChercher.get_child(mot,restreint="oui")
+            if ouChercher==None : return 
+        MCFils=listeMC[-1]
+        monMC=ouChercher.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):
@@ -1157,6 +1723,37 @@ 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="COMPUTATION_ENVIRONMENT();HYDRO();GENERAL_PARAMETERS();NUMERICAL_PARAMETERS()"
+        #texte="TRACERS();"
+        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();N_PROCESSING_OPTIONS();CONTINGENCY_OPTIONS();CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
+        texte="CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
+        return texte
+
+    #---------------------------#
+
     #---------------------------#
     def _newZCRACKS(self):
     #---------------------------#
     #---------------------------#
     def _newZCRACKS(self):
     #---------------------------#
@@ -1175,28 +1772,17 @@ 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())
+      QSfichier=QSfichier[0]
+      self.fichierMED=QSfichier
       from acquiertGroupes import getGroupes
       erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
       from acquiertGroupes import getGroupes
       erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
-      if erreur != "" : print "a traiter"
-      #else :
-      #   from monBoutonSalome import MonBoutonSalome
-      #   desBoutonSalome = MonBoutonSalome()
-      #   icon = QIcon()
-      #   icon = QIcon(self.appli.repIcon+"/image240.png")
-      #   desBoutonSalome.pushButton.setIcon(icon)
-      #   desBoutonSalome.setMinimumSize(QtCore.QSize(453, 103))
-
-      #   self.openfile=QFileDialog(self.appli,caption='Fichier Med',filter=extensions)
-      #   self.openfile.layout().addWidget(desBoutonSalome)
-      #   self.connect(desBoutonSalome.pushButton,SIGNAL("clicked()"),self.BoutonSalomePressed)
-      #   self.connect(self.openfile,SIGNAL("fileSelected(QString)"),self.BoutonFileSelected)
-      #   r=self.openfile.exec_()
+      if erreur != "" : print ("a traiter")
       texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
       texteSources=""
       texteCond=""
       texteNoCond=""
       texteVcut=""
       texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
       texteSources=""
       texteCond=""
       texteNoCond=""
       texteVcut=""
+      texteZs=""
       for groupe in self.listeGroupes :
           if groupe[0:8]=='CURRENT_': 
              texteSources +=groupe[8:]+"=SOURCE("
       for groupe in self.listeGroupes :
           if groupe[0:8]=='CURRENT_': 
              texteSources +=groupe[8:]+"=SOURCE("
@@ -1204,7 +1790,8 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
           if groupe[0:5]=='COND_':    texteCond    +=groupe[5:]+"=CONDUCTEUR();\n"
           if groupe[0:7]=='NOCOND_':  texteNoCond  +=groupe[7:]+"=NOCOND();\n"
           if groupe[0:5]=='VCUT_':    texteVcut    +='V_'+groupe[5:]+"=VCUT();\n"
           if groupe[0:5]=='COND_':    texteCond    +=groupe[5:]+"=CONDUCTEUR();\n"
           if groupe[0:7]=='NOCOND_':  texteNoCond  +=groupe[7:]+"=NOCOND();\n"
           if groupe[0:5]=='VCUT_':    texteVcut    +='V_'+groupe[5:]+"=VCUT();\n"
-      texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut
+          if groupe[0:3]=='ZS_':      texteZs      +=groupe[3:]+"=ZS();\n"
+      texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs
       self.newTexteCND=texte
       self.modified=1
       return texte
       self.newTexteCND=texte
       self.modified=1
       return texte
@@ -1215,10 +1802,10 @@ 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)
       from acquiertGroupes import getGroupes
       erreur,self.listeGroupes,self.nomMaillage=getGroupes(self.fichierMED)
-      if erreur != "" : print "a traiter"
+      if erreur != "" : print ("a traiter")
 
     #-----------------------------
     def BoutonSalomePressed(self):
 
     #-----------------------------
     def BoutonSalomePressed(self):
@@ -1229,6 +1816,105 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget):
       self.openfile.close()
 
 
       self.openfile.close()
 
 
+    #-----------------------------------------
+    def initSplitterSizes(self, nbWidget=3):
+    #-----------------------------------------
+       #print ("je passe ds initSplitterSizes", nbWidget)
+
+       if   self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes3=[1,1550,150]
+       elif self.code in [ 'MAP']            : self.splitterSizes3=[700,300]
+       else                                  : self.splitterSizes3=[150,1000,300]
+
+       if   self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes2=[5,1500]
+       else                                  : self.splitterSizes2=[300,1000]
+
+
+
+    #-----------------------------------------
+    def restoreSplitterSizes(self,nbWidget=3):
+    #----------------------------------------
+      
+      #traceback.print_stack()
+      #print ("je passe ds restoreSplitterSizes")
+      if not(hasattr(self,'splitter')) : return
+      if nbWidget==2  : newSizes=self.splitterSizes2
+      if nbWidget==3  : newSizes=self.splitterSizes3
+      #self.inhibeSplitter = 1
+      self.splitter.setSizes(newSizes)
+      #self.inhibeSplitter = 0
+      QApplication.processEvents()
+      # seule la fentetre du milieu est necessaire
+      self.splitter.widget(1).resizeEvent=self.saveSplitterSizes
+   
+    #-----------------------------------------
+    def saveSplitterSizes(self,event):
+    #-----------------------------------------
+      #print ("je passe ds saveSplitterSizes")
+      if self.inhibeSplitter : return
+      if self.widgetOptionnel == None  : self.splitterSizes2 = self.splitter.sizes()[0:2]
+      else                             : self.splitterSizes3 = self.splitter.sizes()[0:3]
+
+    #------------------------
+    def fermeOptionnel(self):
+    #------------------------
+      if self.widgetOptionnel == None : return
+
+      self.inhibeSplitter=1
+      self.widgetOptionnel.setParent(None)
+      self.widgetOptionnel.close()
+      self.widgetOptionnel.deleteLater()
+      self.widgetOptionnel=None
+      self.inhibeSplitter=0
+      self.restoreSplitterSizes(2)
+
+    #------------------------
+    def ajoutOptionnel(self):
+    #------------------------
+      #if len(self.splitterSizes) == 2 : self.splitterSizes.append(self.oldSizeWidgetOptionnel)
+      #else : self.splitterSizes[2] = self.oldSizeWidgetOptionnel # ceinture pour les close bizarres
+      #self.splitterSizes[1] = self.splitterSizes[1] - self.splitterSizes[2]
+      
+      self.restoreSplitterSizes(3)
+
+
+    #------------------------
+    def fermeArbre(self):
+    #------------------------
+       #print (self.widgetTree)
+       self.oldWidgetTree=self.widgetTree
+       self.widgetTree.hide()
+       #self.widgetTree=None
+
+    #------------------------
+    def ouvreArbre(self):
+    #------------------------
+       #print ('je passe la')
+       #print (self.widgetTree)
+       #self.widgetTree=self.oldWidgetTree
+       self.widgetTree.show()
+       #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'
     name='prefs_'+prefs.code
 if __name__ == "__main__":
     self.code='ASTER'
     name='prefs_'+prefs.code