Salome HOME
bug sur un mesage dans une exception sur un validator (cf JPA)
[tools/eficas.git] / InterfaceQT4 / editor.py
index 17b8b19c04bf15570a4c2b1877fa8e7be70cb548..4769c91583b7b33b5fbabd8675650f0988ad353f 100755 (executable)
 from __future__ import absolute_import
 from __future__ import print_function
 try :
-   from builtins import str
-   from builtins import range
+    from builtins import str
+    from builtins import range
 except : pass
 
 import types,sys,os, re
 import  subprocess
 import traceback
-import six
 
 
 from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter, QLabel
@@ -46,12 +45,12 @@ from InterfaceQT4   import browser
 
 from desBaseWidget    import Ui_baseWidget
 from InterfaceQT4.monViewTexte   import ViewText
-from monWidgetCreeParam import MonWidgetCreeParam 
+from monWidgetCreeParam import MonWidgetCreeParam
 
 DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
 debug = False
 
-    
+
 from InterfaceQT4.editorSsIhm    import JDCEditorSsIhm
 
 
@@ -65,8 +64,8 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
 # Methodes faisant appel a ssIhm
 # ----------------------------------------
 
-    def __init__ (self,appli,fichier = None, jdc=None, QWParent=None, units = None, include=0):
-    #------------------------------------------------------------------------------------------
+    def __init__ (self,appliEficas,fichier = None, jdc=None, QWParent=None, units = None, include=0):
+    #------------------------------------------------------------------------------------------------
 
 
         QWidget.__init__(self,None)
@@ -77,32 +76,35 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
         self.fenetreCentraleAffichee=None
         self.dejaDansPlieTout=False
         self.listeDesListesOuvertes=set()
-        self.afficheListesPliees=True
-        if appli!=None and hasattr(appli,"statusBar"): self.sb = appli.statusBar()
+        if appliEficas!=None and hasattr(appliEficas,"statusBar"): self.sb = appliEficas.statusBar()
         else : self.sb = None
         self.QWParent=QWParent
 
-        JDCEditorSsIhm. __init__ (self,appli,fichier, jdc,units,include)
+        JDCEditorSsIhm. __init__ (self,appliEficas,fichier, jdc,units,include)
+        if self.jdc:
+            comploader.chargerComposants()
+            self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+
 
         # Particularites IHM : met la fenetre a jour
 
         self.initSplitterSizes()
-        if self.code == "ASTER" or self.code == "monCode" : self.afficheListesPliees =True
-        if self.code == 'PSEN_N1' : self.afficheListesPliees = False
 
         #self.affiche=self.appliEficas.maConfiguration.affiche
 
+        self.afficheListesPliees=self.maConfiguration.afficheListesPliees
         if self.code in ['MAP','CARMELCND','PSEN'] : self.maConfiguration.afficheCommandesPliees=False
         if self.code in ['MAP',]: self.fermeArbre()
         #   self.widgetTree.close()
         #   self.widgetTree=None
 
-        if self.maConfiguration.closeArbre: self.fermeArbre()
+        if self.maConfiguration.closeArbre      : self.fermeArbre()
+        if self.maConfiguration.closeOptionnel  : self.fermeOptionnel()
         if self.maConfiguration.boutonDsMenuBar : self.appliEficas.remplitIconesCommandes()
 
-        self.version_code = session.d_env.cata
-     
-        self.format =  self.appliEficas.format_fichier
+
+        self.formatFichierOut =  self.appliEficas.formatFichierOut
+        self.formatFichierIn  =  self.appliEficas.formatFichierIn
 
         self.node_selected = []
         self.deplier = True
@@ -118,11 +120,11 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
         self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
 
         if self.appliEficas.readercata.demandeCatalogue==True  :
-           nomFichierTranslation='translatorFichier'+'_'+str(self.appliEficas.readercata.versionCode)
-           if hasattr(self.appliEficas.maConfiguration,nomFichierTranslation) :
-              translatorFichier=getattr(self.appliEficas.maConfiguration,nomFichierTranslation)
-              from Extensions import localisation
-              localisation.localise(None,self.appliEficas.langue,translatorFichier=translatorFichier)
+            nomFichierTranslation='translatorFichier'+'_'+str(self.appliEficas.readercata.labelCode)
+            if hasattr(self.appliEficas.maConfiguration,nomFichierTranslation) :
+                translatorFichier=getattr(self.appliEficas.maConfiguration,nomFichierTranslation)
+                from Extensions import localisation
+                localisation.localise(None,self.appliEficas.langue,translatorFichier=translatorFichier)
 
 
         if self.jdc_item and self.appliEficas.ssIhm==False :
@@ -173,7 +175,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
 #   saveFileLegerAs
 
 # ---------------------------------------------
-# Methodes Surchargees 
+# Methodes Surchargees
 # ---------------------------------------------
 
     #-----------------------------------------------------------------------#
@@ -185,20 +187,20 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     #--------------------------------#
     def informe(self,titre,txt,critique=True):
     #--------------------------------#
-       if  critique :
-           self.afficheInfos(tr(txt),Qt.red)
-           QMessageBox.critical( self, tr(titre), tr(txt))
-       else :
-           QMessageBox.warning( self, tr(titre),tr(txt))
+        if  critique :
+            self.afficheInfos(tr(txt),Qt.red)
+            QMessageBox.critical( self, tr(titre), tr(txt))
+        else :
+            QMessageBox.warning( self, tr(titre),tr(txt))
 
     #--------------------------------#
     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 
+            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 : 
+        if noeudAvantCommentaire ==self.tree.racine :
             self.tree.racine.appendChild("COMMENTAIRE",pos=0)
             return
         noeudAvantCommentaire.addComment(True)
@@ -222,10 +224,10 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
         self.monExe.closeWriteChannel()
         self.w.exec_()
         try:
-          commande="rm  "+ nomFichier
-          os.system(commande)
+            commande="rm  "+ nomFichier
+            os.system(commande)
         except :
-          pass
+            pass
 
     def readFromStdErr(self):
         a=self.monExe.readAllStandardError()
@@ -235,7 +237,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
         a=self.monExe.readAllStandardOutput()
         self.w.view.append(str(a.data()))
 
-        
+
     #-----------------------#
     def gestionParam(self):
     #-----------------------#
@@ -257,11 +259,11 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     #----------------------------------------------#
         if couleur=='red' : couleur = Qt.red
         if self.sb:
-           mapalette=self.sb.palette()
-           mapalette.setColor( QPalette.WindowText, couleur )
-           self.sb.setPalette( mapalette );
-           self.sb.showMessage(message,4000)
-           self.couleur=couleur
+            mapalette=self.sb.palette()
+            mapalette.setColor( QPalette.WindowText, couleur )
+            self.sb.setPalette( mapalette );
+            self.sb.showMessage(message,4000)
+            self.couleur=couleur
 
     #------------------------------#
     def afficheAlerte(self,titre,message):
@@ -283,166 +285,166 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     #---------------------------------------#
     def chercheNoeudSelectionne(self,copie=1):
     #---------------------------------------#
-      """
-        appele par Cut et Copy pour positionner self.node_selected
-      """
-      self.node_selected=[]
-      if len(self.tree.selectedItems()) == 0 : return
-      self.node_selected=self.tree.selectedItems()
+        """
+          appele par Cut et Copy pour positionner self.node_selected
+        """
+        self.node_selected=[]
+        if len(self.tree.selectedItems()) == 0 : return
+        self.node_selected=self.tree.selectedItems()
 
 
     #---------------------#
     def handleSupprimer(self):
     #---------------------#
-      self.chercheNoeudSelectionne()
-      if len(self.node_selected) == 0 : return
-      self.QWParent.noeud_a_editer = []
-      if self.node_selected[0]==self.tree.racine: return
-      if len(self.node_selected) == 1 : self.node_selected[0].delete()
-      else : self.node_selected[0].deleteMultiple(self.node_selected)
+        self.chercheNoeudSelectionne()
+        if len(self.node_selected) == 0 : return
+        self.QWParent.noeud_a_editer = []
+        if self.node_selected[0]==self.tree.racine: return
+        if len(self.node_selected) == 1 : self.node_selected[0].delete()
+        else : self.node_selected[0].deleteMultiple(self.node_selected)
 
     #---------------------#
     def handleRechercher(self):
     #---------------------#
-      from .monRecherche import DRecherche
-      monRechercheDialg=DRecherche(parent=self,fl=0)
-      monRechercheDialg.show()
+        from .monRecherche import DRecherche
+        monRechercheDialg=DRecherche(parent=self,fl=0)
+        monRechercheDialg.show()
 
 
     #--------------------------------#
     def handleRechercherDsCatalogue(self):
     #-----------------------------#
-      from .monRechercheCatalogue import DRechercheCatalogue
-      monRechercheDialg=DRechercheCatalogue(self.QWParent,self)
-      monRechercheDialg.show()
+        from .monRechercheCatalogue import DRechercheCatalogue
+        monRechercheDialg=DRechercheCatalogue(self.QWParent,self)
+        monRechercheDialg.show()
 
     #---------------------#
     def handleDeplier(self):
     #---------------------#
-       if self.tree == None : return
-       #self.tree.collapseAll()
-       if self.deplier :
-          #print "je plie"
-          self.tree.expandItem(self.tree.topLevelItem(0))
-          self.deplier = False
-          if self.fenetreCentraleAffichee != None  :
-             if hasattr(self.fenetreCentraleAffichee.node,'plieToutEtReaffiche'):
-                 self.fenetreCentraleAffichee.node.plieToutEtReaffiche()
-       else:
-          #print "je deplie"
-          self.tree.expandItem(self.tree.topLevelItem(0))
-          self.deplier = True
-          if self.fenetreCentraleAffichee != None  :
-             if hasattr(self.fenetreCentraleAffichee.node,'deplieToutEtReaffiche'):
-                 self.fenetreCentraleAffichee.node.deplieToutEtReaffiche()
+        if self.tree == None : return
+        #self.tree.collapseAll()
+        if self.deplier :
+            #print "je plie"
+            self.tree.expandItem(self.tree.topLevelItem(0))
+            self.deplier = False
+            if self.fenetreCentraleAffichee != None  :
+                if hasattr(self.fenetreCentraleAffichee.node,'plieToutEtReaffiche'):
+                    self.fenetreCentraleAffichee.node.plieToutEtReaffiche()
+        else:
+            #print "je deplie"
+            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):
     #---------------------#
-      """
-      Stocke dans Eficas.noeud_a_editer le noeud a couper
-      """
-      #print "handleEditCut"
-      self.chercheNoeudSelectionne()
-      self.QWParent.edit="couper"
-      self.QWParent.noeud_a_editer = self.node_selected
+        """
+        Stocke dans Eficas.noeud_a_editer le noeud a couper
+        """
+        #print "handleEditCut"
+        self.chercheNoeudSelectionne()
+        self.QWParent.edit="couper"
+        self.QWParent.noeud_a_editer = self.node_selected
 
     #-----------------------#
     def handleEditCopy(self):
     #-----------------------#
-      """
-      Stocke dans Eficas.noeud_a_editer le noeud a copier
-      """
-      self.chercheNoeudSelectionne()
-      if len(self.node_selected) == 0 : return
-      if len(self.node_selected) == 1 : self.node_selected[0].updateNodeLabelInBlue()
-      else :  self.node_selected[0].updatePlusieursNodeLabelInBlue(self.node_selected)
-      self.QWParent.edit="copier"
-      self.QWParent.noeud_a_editer = self.node_selected
+        """
+        Stocke dans Eficas.noeud_a_editer le noeud a copier
+        """
+        self.chercheNoeudSelectionne()
+        if len(self.node_selected) == 0 : return
+        if len(self.node_selected) == 1 : self.node_selected[0].updateNodeLabelInBlue()
+        else :  self.node_selected[0].updatePlusieursNodeLabelInBlue(self.node_selected)
+        self.QWParent.edit="copier"
+        self.QWParent.noeud_a_editer = self.node_selected
 
     #------------------------#
     def handleEditPaste(self):
     #------------------------#
-      """
-      Lance la copie de l'objet place dans self.QWParent.noeud_a_editer
-      Ne permet que la copie d'objets de type Commande ou MCF
-      """
-      self.chercheNoeudSelectionne()
-      if (not(hasattr(self.QWParent,'noeud_a_editer'))) or len(self.QWParent.noeud_a_editer)==0:
-          QMessageBox.information( self,
-                      tr("Copie impossible"),
-                      tr("Veuillez selectionner un objet a copier"))
-          return
-      if len(self.node_selected) != 1 :
-          QMessageBox.information( self,
-                      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:
-         #self.handleEditPasteMultiple()
-         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"):
-        #print   (noeudOuColler.item.parent.getChild(noeudOuColler.item.nom)) 
-        try:
-           if noeudOuColler == self.tree.racine :
-               child=noeudOuColler.doPastePremier(noeudACopier)
-           else :
-               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 = ''
-               self.afficheInfos("Copie refusee",Qt.red)
-           if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
-               try :
-                 nom=noeudACopier.item.sd.nom
-                 child.item.nommeSd(nom)
-               except :
-                 pass
-           return
-           self.initModif()
-           child.select()
-        except  :
-           traceback.print_exc()
-           QMessageBox.critical( self,tr( "Copie refusee"),tr('Copie refusee pour ce type d objet'))
-           self.message = ''
-           self.afficheInfos("Copie refusee",Qt.red)
-           return
-
-      # il faut declarer le JDCDisplay_courant modifie
-      # suppression eventuelle du noeud selectionne
-      # si possible on renomme l objet comme le noeud couper
-
-      if (self.QWParent.edit == "couper"):
-         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=self.getTreeIndex(noeudACopier)
-            noeudACopier.treeParent.item.deplaceEntite(indexNoeudACopier,indexNoeudOuColler,pos)
-            noeudACopier.treeParent.buildChildren()
-
-         #else:
-         except:
-            pass
-         self.QWParent.noeud_a_editer=[]
+        """
+        Lance la copie de l'objet place dans self.QWParent.noeud_a_editer
+        Ne permet que la copie d'objets de type Commande ou MCF
+        """
+        self.chercheNoeudSelectionne()
+        if (not(hasattr(self.QWParent,'noeud_a_editer'))) or len(self.QWParent.noeud_a_editer)==0:
+            QMessageBox.information( self,
+                        tr("Copie impossible"),
+                        tr("Veuillez selectionner un objet a copier"))
+            return
+        if len(self.node_selected) != 1 :
+            QMessageBox.information( self,
+                        tr("Copie impossible"),
+                        tr("Veuillez selectionner un seul objet : la copie se fera apres le noeud selectionne"))
+            return
+        noeudOuColler=self.node_selected[0]
 
-      # on rend la copie a nouveau possible en liberant le flag edit
-      self.QWParent.edit="copier"
-      noeudACopier.select()
+        if len(self.QWParent.noeud_a_editer)!=1:
+            #self.handleEditPasteMultiple()
+            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"):
+        #print   (noeudOuColler.item.parent.getChild(noeudOuColler.item.nom))
+            try:
+                if noeudOuColler == self.tree.racine :
+                    child=noeudOuColler.doPastePremier(noeudACopier)
+                else :
+                    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 = ''
+                    self.afficheInfos("Copie refusee",Qt.red)
+                if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
+                    try :
+                        nom=noeudACopier.item.sd.nom
+                        child.item.nommeSd(nom)
+                    except :
+                        pass
+                return
+                self.initModif()
+                child.select()
+            except  :
+                traceback.print_exc()
+                QMessageBox.critical( self,tr( "Copie refusee"),tr('Copie refusee pour ce type d objet'))
+                self.message = ''
+                self.afficheInfos("Copie refusee",Qt.red)
+                return
+
+        # il faut declarer le JDCDisplay_courant modifie
+        # suppression eventuelle du noeud selectionne
+        # si possible on renomme l objet comme le noeud couper
+
+        if (self.QWParent.edit == "couper"):
+            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=self.getTreeIndex(noeudACopier)
+                noeudACopier.treeParent.item.deplaceEntite(indexNoeudACopier,indexNoeudOuColler,pos)
+                noeudACopier.treeParent.buildChildren()
+
+            #else:
+            except:
+                pass
+            self.QWParent.noeud_a_editer=[]
+
+        # on rend la copie a nouveau possible en liberant le flag edit
+        self.QWParent.edit="copier"
+        noeudACopier.select()
 
     #----------------------------------#
     def handleDeplaceMultiple(self):
     #----------------------------------#
-       pass
+        pass
 
     #----------------------------------#
     def handleEditPasteMultiple(self):
@@ -450,266 +452,270 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
 
     # On ne garde que les niveaux "Etape"
     # On insere dans l'ordre du JDC
-     listeNoeudsACouper=[]
-     listeIndex=[]
-     listeChild=[]
-     listeItem=[]
-     from InterfaceQT4 import compojdc
-     noeudOuColler=self.node_selected[0]
-     if not (isinstance(noeudOuColler.treeParent, compojdc.Node)):
-        QMessageBox.information( self,
-                  tr("Copie impossible a cet endroit",),
-                  tr("Veuillez selectionner une commande, un parametre, un commentaire ou une macro"))
-        return
-     indexNoeudOuColler=noeudOuColler.treeParent.children.index(noeudOuColler)
-
-     for noeud in self.QWParent.noeud_a_editer :
-        if not (isinstance(noeud.treeParent, compojdc.Node)): continue
-        indexInTree=noeud.treeParent.children.index(noeud)
-        indice = 0
+        listeNoeudsACouper=[]
+        listeIndex=[]
+        listeChild=[]
+        listeItem=[]
+        from InterfaceQT4 import compojdc
+        noeudOuColler=self.node_selected[0]
+        if not (isinstance(noeudOuColler.treeParent, compojdc.Node)):
+            QMessageBox.information( self,
+                      tr("Copie impossible a cet endroit",),
+                      tr("Veuillez selectionner une commande, un parametre, un commentaire ou une macro"))
+            return
+        indexNoeudOuColler=noeudOuColler.treeParent.children.index(noeudOuColler)
+
+        for noeud in self.QWParent.noeud_a_editer :
+            if not (isinstance(noeud.treeParent, compojdc.Node)): continue
+            indexInTree=noeud.treeParent.children.index(noeud)
+            indice = 0
+            for index in listeIndex:
+                if index < indexInTree : indice = indice +1
+            listeIndex.insert(indice, indexInTree)
+            listeNoeudsACouper.insert(indice, noeud)
+
+        noeudJdc=noeudOuColler.treeParent
+        dejaCrees=0
+        # on les cree a l'envers parcequ'on ajoute a NoeudOuColler
+        listeIndex.reverse()
+        for index in listeIndex:
+            indexTravail=index
+            if indexNoeudOuColler < index:
+                indexTravail=indexTravail+dejaCrees
+            noeudOuColler=noeudJdc.children[indexNoeudOuColler]
+            noeud=noeudJdc.children[indexTravail]
+            child=noeud.doPaste(noeudOuColler)
+            listeChild.append(child)
+            dejaCrees=dejaCrees+1
+
+        self.QWParent.noeud_a_editer = []
+        for i in range(len(listeIndex)):
+            noeud=noeudJdc.children[indexNoeudOuColler+1+i]
+            self.QWParent.noeud_a_editer.append(noeud)
+
+        listeASupprimer=[]
+        if self.QWParent.edit !="couper" : return
+
         for index in listeIndex:
-            if index < indexInTree : indice = indice +1
-        listeIndex.insert(indice, indexInTree)
-        listeNoeudsACouper.insert(indice, noeud)
-
-     noeudJdc=noeudOuColler.treeParent
-     dejaCrees=0
-     # on les cree a l'envers parcequ'on ajoute a NoeudOuColler
-     listeIndex.reverse()
-     for index in listeIndex:
-         indexTravail=index
-         if indexNoeudOuColler < index:
-            indexTravail=indexTravail+dejaCrees
-         noeudOuColler=noeudJdc.children[indexNoeudOuColler]
-         noeud=noeudJdc.children[indexTravail]
-         child=noeud.doPaste(noeudOuColler)
-         listeChild.append(child)
-         dejaCrees=dejaCrees+1
-
-     self.QWParent.noeud_a_editer = []
-     for i in range(len(listeIndex)):
-        noeud=noeudJdc.children[indexNoeudOuColler+1+i]
-        self.QWParent.noeud_a_editer.append(noeud)
-
-     listeASupprimer=[]
-     if self.QWParent.edit !="couper" : return
-
-     for index in listeIndex:
-         indexTravail=index
-         if indexNoeudOuColler < index:
-            indexTravail=indexTravail+(len(listeIndex))
-         noeud=noeudJdc.children[indexTravail]
-
-         listeItem.append(noeud.item)
-         listeASupprimer.append(noeud)
-
-     for i in range(len(listeChild)):
-         self.tree.item.suppItem(listeItem[i])
-         listeChild[i].item.update(listeItem[i])
-
-     self.QWParent.noeud_a_editer = []
+            indexTravail=index
+            if indexNoeudOuColler < index:
+                indexTravail=indexTravail+(len(listeIndex))
+            noeud=noeudJdc.children[indexTravail]
+
+            listeItem.append(noeud.item)
+            listeASupprimer.append(noeud)
+
+        for i in range(len(listeChild)):
+            self.tree.item.suppItem(listeItem[i])
+            listeChild[i].item.update(listeItem[i])
+
+        self.QWParent.noeud_a_editer = []
 
     #----------------------------------#
     def handleAjoutEtape(self,nomEtape):
     #----------------------------------#
-      self.chercheNoeudSelectionne()
-      if len(self.node_selected) == 0 or self.node_selected[0] == self.tree.racine : 
-         nodeOuAjouter=self.tree.racine
-         nouveau=nodeOuAjouter.appendChild(nomEtape,pos='first')
-      else :               
-         nodeOuAjouter=self.node_selected[0]
-         if nodeOuAjouter != self.tree.racine :
-            while  nodeOuAjouter.treeParent != self.tree.racine:
-                   nodeOuAjouter=nodeOuAjouter.treeParent
-         nouveau=nodeOuAjouter.appendBrother(nomEtape)
-      try : 
-        self.node_selected[0].setSelected(False)
-      except : pass
-      nouveau.setSelected(True)
-      nouveau.affichePanneau()
+        self.chercheNoeudSelectionne()
+        if len(self.node_selected) == 0 or self.node_selected[0] == self.tree.racine :
+            nodeOuAjouter=self.tree.racine
+            nouveau=nodeOuAjouter.appendChild(nomEtape,pos='first')
+        else :
+            nodeOuAjouter=self.node_selected[0]
+            if nodeOuAjouter != self.tree.racine :
+                while  nodeOuAjouter.treeParent != self.tree.racine:
+                    nodeOuAjouter=nodeOuAjouter.treeParent
+            nouveau=nodeOuAjouter.appendBrother(nomEtape)
+        try :
+            self.node_selected[0].setSelected(False)
+        except : pass
+        nouveau.setSelected(True)
+        nouveau.affichePanneau()
 
 
     #---------------------------#
     def getFileVariable(self) :
     #---------------------------#
-     titre = tr("Choix d'un fichier XML")
-     texte = tr("Le fichier contient une commande MODEL\n")
-     texte = texte+tr('Donnez le nom du fichier XML qui contient la description des variables')
-     QMessageBox.information( self, titre,tr(texte))
+        titre = tr("Choix d'un fichier XML")
+        texte = tr("Le fichier contient une commande MODEL\n")
+        texte = texte+tr('Donnez le nom du fichier XML qui contient la description des variables')
+        QMessageBox.information( self, titre,tr(texte))
 
-     fichier = QFileDialog.getOpenFileName(self.appliEficas,
-                   tr('Ouvrir Fichier'),
-                   self.appliEficas.maConfiguration.savedir,
-                   tr('Wrapper Files (*.xml);;''All Files (*)'))
-     return  fichier
+        fichier = QFileDialog.getOpenFileName(self.appliEficas,
+                      tr('Ouvrir Fichier'),
+                      self.appliEficas.maConfiguration.savedir,
+                      tr('Wrapper Files (*.xml);;''All Files (*)'))
+        return  fichier
 
     #------------#
     def run(self):
     #------------#
-      fonction="run"+self.code
-      #print fonction
-      if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
+        fonction="run"+self.code
+        if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
 
     #------------#
     def saveRun(self):
     #------------#
-      fonction="saveRun"+self.code
-      if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
+        fonction="saveRun"+self.code
+        if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
 
 
 # ---------------------------------------------
-# Methodes Non Crees dans ssIHM 
+# Methodes Non Crees dans ssIHM
 # ---------------------------------------------
+    #---------------#
+    def runVP(self):
+    #---------------#
+        texte=self.getTextJDC("MAPVp",pourRun=1)
+        print (texte)
 
     #---------------#
     def runMAP(self):
     #---------------#
 
-      if not(self.jdc.isValid()):
-         QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution MAP"))
-         return
-      if len(self.jdc.etapes) != 1 :
-         QMessageBox.critical( self, tr("Execution impossible "),tr("le JDC doit contenir un et un seul composant"))
-         return
-      if self.modified or self.fichier==None  :
-         self.fichierMapInput = self.__generateTempFilename(prefix = "map_run", suffix = ".map")
-         texte=self.getTextJDC("MAP")
-         self.writeFile( self.fichierMapInput, txt = texte)
-      else :
-         self.fichierMapInput=self.fichier
-      composant=self.jdc.etapes[0].nom.lower()[0:-5]
-
-
-      # :TRICKY: to determine if a component requires SALOME, loads the component from Eficas catalog
-      # then instantiate corresponding class and call getUseSalome() method
-      try:
-          from mapengine.spec import factory
-          mapComponent = factory.new(composant)[0]
-
-          command = "map"
-          if mapComponent.getUseSalome():
-              command += " -r sappli"
-          textePython=(command + " run -n "+composant +" -i "+self.fichierMapInput)
-
-          #textePython="ls -l"
-          self._viewTextExecute( textePython,"map_run",".sh")
-          #try:
-          #  commande="rm  "+self.fichierMapInput
-          #   os.system(commande)
-          #except :
-          #   pass
-      except Exception as e:
-          print((traceback.print_exc()))
+        if not(self.jdc.isValid()):
+            QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution MAP"))
+            return
+        if len(self.jdc.etapes) != 1 :
+            QMessageBox.critical( self, tr("Execution impossible "),tr("le JDC doit contenir un et un seul composant"))
+            return
+        if self.modified or self.fichier==None  :
+            self.fichierMapInput = self.__generateTempFilename(prefix = "map_run", suffix = ".map")
+            texte=self.getTextJDC("MAP")
+            self.writeFile( self.fichierMapInput, txt = texte)
+        else :
+            self.fichierMapInput=self.fichier
+        composant=self.jdc.etapes[0].nom.lower()[0:-5]
+
+
+        # :TRICKY: to determine if a component requires SALOME, loads the component from Eficas catalog
+        # then instantiate corresponding class and call getUseSalome() method
+        try:
+            from mapengine.spec import factory
+            mapComponent = factory.new(composant)[0]
+
+            command = "map"
+            if mapComponent.getUseSalome():
+                command += " -r sappli"
+            textePython=(command + " run -n "+composant +" -i "+self.fichierMapInput)
+
+            #textePython="ls -l"
+            self._viewTextExecute( textePython,"map_run",".sh")
+            #try:
+            #  commande="rm  "+self.fichierMapInput
+            #   os.system(commande)
+            #except :
+            #   pass
+        except Exception as e:
+            print((traceback.print_exc()))
 
     #-------------------#
     def runZCRACKS(self):
     #-------------------#
-      if not(self.jdc.isValid()):
-         QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
-         return
-      if self.modified or self.fichier==None  :
-      #if 1:
-         self.fichierZcracksInput = self.__generateTempFilename(prefix = "zcracks_run", suffix = ".z7p")
-         texte=self.getTextJDC("ZCRACKS",pourRun=1)
-         self.writeFile( self.fichierZcracksInput, txt = texte)
-      else :
-         self.fichierZcracksInput=self.fichier
-      try :
-          #commande ="Zrun -zp "
-          commande="more "
-          textePython=(commande + self.fichierZcracksInput)
-          self._viewTextExecute( textePython,"run_zcracks",".sh")
-      except Exception as e:
-          print((traceback.print_exc()))
+        if not(self.jdc.isValid()):
+            QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
+            return
+        if self.modified or self.fichier==None  :
+        #if 1:
+            self.fichierZcracksInput = self.__generateTempFilename(prefix = "zcracks_run", suffix = ".z7p")
+            texte=self.getTextJDC("ZCRACKS",pourRun=1)
+            self.writeFile( self.fichierZcracksInput, txt = texte)
+        else :
+            self.fichierZcracksInput=self.fichier
+        try :
+            #commande ="Zrun -zp "
+            commande="more "
+            textePython=(commande + self.fichierZcracksInput)
+            self._viewTextExecute( textePython,"run_zcracks",".sh")
+        except Exception as e:
+            print((traceback.print_exc()))
 
     #-------------------#
     def runCARMELCND(self):
     #-------------------#
-      #if not(self.jdc.isValid()):
-      #   QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
-      #   return
-      if self.modified or self.fichier==None  :
-         QMessageBox.critical( self, tr( "Execution impossible "),tr("Sauvegarder SVP avant l'execution "))
-         return
-      if not hasattr(self,'generator'): texte=self.getTextJDC(self.format)
-      from PrepareRunCarmel import prepareRunCarmel
-      fichierGenerique=os.path.basename(self.fichier).split(".")[0]
-      repMed=os.path.dirname(self.fichier)
-      repExeCarmel=self.generator.get_repExeCarmel()
-      textePython=prepareRunCarmel(repExeCarmel,repMed,fichierGenerique)
-      nomFichier = self.__generateTempFilename("carmel_run", suffix = ".sh")
-      f=open(nomFichier,'w')
-      f.write(textePython)
-      f.close()
-      commande="xterm -e sh "+nomFichier +"\n"
-      os.system(commande)
+        #if not(self.jdc.isValid()):
+        #   QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
+        #   return
+        if self.modified or self.fichier==None  :
+            QMessageBox.critical( self, tr( "Execution impossible "),tr("Sauvegarder SVP avant l'execution "))
+            return
+        if not hasattr(self,'generator'): texte=self.getTextJDC(self.formatFichierOut)
+        from PrepareRunCarmel import prepareRunCarmel
+        fichierGenerique=os.path.basename(self.fichier).split(".")[0]
+        repMed=os.path.dirname(self.fichier)
+        repExeCarmel=self.generator.get_repExeCarmel()
+        textePython=prepareRunCarmel(repExeCarmel,repMed,fichierGenerique)
+        nomFichier = self.__generateTempFilename("carmel_run", suffix = ".sh")
+        f=open(nomFichier,'w')
+        f.write(textePython)
+        f.close()
+        commande="xterm -e sh "+nomFichier +"\n"
+        os.system(commande)
 
     #-------------------#
     def runCarmelCS(self):
     #-------------------#
-      try :
-          commande="runSession pilotyacsCS.py"
-          os.system(commande)
-      except Exception as e:
-          print((traceback.print_exc()))
+        try :
+            commande="runSession pilotyacsCS.py"
+            os.system(commande)
+        except Exception as e:
+            print((traceback.print_exc()))
 
     #-----------------------------------------------------#
     def determineNomFichier(self,path,extension):
     #-----------------------------------------------------#
-      if self.appli.code in DictExtensions:
-         chaine1=DictExtensions[self.appli.code]+" (*."+DictExtensions[self.appli.code]+");;"
-         extensions= tr(chaine1+ "All Files (*)")
-      else :
-         extensions= tr("JDC (*.comm);;" "All Files (*)")
-
-      if self.appli.code == "MAP" :
-         extensions = extensions + ";; Run (*.input);;"
-
-      fn = QFileDialog.getSaveFileName( self,
-             tr("sauvegarde"), path,
-             extensions,None,
-             QFileDialog.DontConfirmOverwrite)
-      if fn == None : return (0, None)
-      fn=fn[0]
-      if fn=='': return (0, None)
-
-      ext = QFileInfo(fn).suffix()
-      if ext == '': fn+=extension
-
-      if QFileInfo(fn).exists():
-           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 self.appliEficas.code in DictExtensions:
+            chaine1=DictExtensions[self.appliEficas.code]+" (*."+DictExtensions[self.appliEficas.code]+");;"
+            extensions= tr(chaine1+ "All Files (*)")
+        else :
+            extensions= tr("JDC (*.comm);;" "All Files (*)")
+
+        if self.appliEficas.code == "MAP" :
+            extensions = extensions + ";; Run (*.input);;"
+
+        fn = QFileDialog.getSaveFileName( self,
+               tr("sauvegarde"), path,
+               extensions,None,
+               QFileDialog.DontConfirmOverwrite)
+        if fn == None : return (0, None)
+        fn=fn[0]
+        if fn=='': return (0, None)
+
+        ext = QFileInfo(fn).suffix()
+        if ext == '': fn+=extension
+
+        if QFileInfo(fn).exists():
+            msgBox = QMessageBox(self)
+            msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
+            msgBox.setText(tr("Le fichier")+ "  "+str(fn)+ "  " +tr("existe deja"))
+            msgBox.addButton(tr("&Ecraser"),0)
+            msgBox.addButton(tr("&Abandonner"),1)
+            abort=msgBox.exec_()
+            if abort == 1 :  return (0, "")
+        return (1,fn)
 
     #-----------------#
     def saveRunMAP(self):
     #-----------------#
         extension=".input"
         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
+            QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
+                                 tr("Un JdC valide est necessaire pour creer un .input")
+                                  )
+            return
         try :
-          composant=self.jdc.etapes[0].nom.lower()[0:-5]
+            composant=self.jdc.etapes[0].nom.lower()[0:-5]
         except :
-           QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
-                                tr("Choix du composant obligatoire")
-                                 )
-           return
+            QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
+                                 tr("Choix du composant obligatoire")
+                                  )
+            return
         if hasattr(self.maConfiguration, "savedir"): path=self.maConfiguration.savedir
         else : path='C:/'
 
         monNomFichier=""
         if self.fichier is not None and self.fichier != "" :
-             maBase=str(QFileInfo(self.fichier).baseName())+".input"
-             monPath=str(QFileInfo(self.fichier).absolutePath())
-             monNomFichier=os.path.join(monPath,maBase)
+            maBase=str(QFileInfo(self.fichier).baseName())+".input"
+            monPath=str(QFileInfo(self.fichier).absolutePath())
+            monNomFichier=os.path.join(monPath,maBase)
         elif hasattr(self,'monNomFichierInput'):
             monNomFichier=self.monNomFichierInput
 
@@ -720,10 +726,10 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
 
         for c in monDialog.children():
             if isinstance(c,QDialogButtonBox):
-               for b in c.children():
-                  if isinstance(b,QPushButton):
-                     avant=b.text()
-                     if avant=="&Open": b.setText("Save")
+                for b in c.children():
+                    if isinstance(b,QPushButton):
+                        avant=b.text()
+                        if avant=="&Open": b.setText("Save")
         mesFiltres= "input Map (*.input);;All Files (*)"
         monDialog.setNameFilters(mesFiltres)
         if monNomFichier!="" : monDialog.selectFile(monNomFichier)
@@ -758,13 +764,13 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     #-----------------------------------------#
         try :
         #if 1:
-           from ajoutGroupe import handleAjoutGroupFiltre
-           #print listeGroup
-           handleAjoutGroupFiltre(self,listeGroup)
-           #print "apres handleAjoutGroupFiltre"
+            from ajoutGroupe import handleAjoutGroupFiltre
+            #print listeGroup
+            handleAjoutGroupFiltre(self,listeGroup)
+            #print "apres handleAjoutGroupFiltre"
         except :
         #else :
-           pass
+            pass
 
 
     #-----------------------------------------------------------------#
@@ -773,22 +779,22 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
         extension='.casR'
         fn = self.fichierComplet
         #saveas=True # Pour forcer le nom
-        self.generator=self.maConfiguration.mesGenerators.plugins[self.format]()
+        self.generator=self.maConfiguration.mesGenerators.plugins[self.formatFichierOut]()
         if self.fichierComplet is None or saveas:
-          if path is None: path=self.maConfiguration.savedir
-          bOK, fn=self.determineNomFichier(path,extension)
-          if bOK == 0 : return (0, None)
-          if fn == None : return (0, None)
-          if fn== '' : return (0, None)
+            if path is None: path=self.maConfiguration.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.maConfiguration.savedir=os.path.split(ulfile)[0]
-          fn = six.text_type(QDir.toNativeSeparators(fn))
+            ulfile = os.path.abspath(fn)
+            self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+            fn = QDir.toNativeSeparators(fn)
 
         self.fichierComplet = os.path.splitext(fn)[0]+extension
 
         if hasattr(self.generator, "writeComplet"):
-            self.generator.writeComplet(self.fichierComplet,self.jdc,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
+            self.generator.writeComplet(self.fichierComplet,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
 
         if self.salome : self.appliEficas.addJdcInSalome( self.fichierComplet)
 
@@ -812,40 +818,44 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
         if not self.modified and not saveas:
             return (0, None)      # do nothing if text wasn't changed
 
-        if self.appli.code in DictExtensions :
-           extension=DictExtensions[self.appli.code]
+        if self.appliEficas.code in DictExtensions :
+            extension=DictExtensions[self.appliEficas.code]
         else :
-           extension='.comm'
+            extension='.comm'
 
         newName = None
         fn = self.fichier
         if self.fichier is None or saveas:
-          if path is None: path=self.maConfiguration.savedir
-          bOK, fn=self.determineNomFichier(path,extension)
-          if bOK == 0 : return (0, None)
-          if fn == None : return (0, None)
-          if fn== '' : return (0, None)
+            if path is None: path=self.maConfiguration.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.maConfiguration.savedir=os.path.split(ulfile)[0]
-          fn = six.text_type(QDir.toNativeSeparators(fn))
-          newName = fn
+            ulfile = os.path.abspath(fn)
+            self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+            fn = QDir.toNativeSeparators(fn)
+            newName = fn
 
 
         if not (self.writeFile(fn,formatLigne=formatLigne)): return (0, None)
         self.fichier = fn
         self.modified  = False
         if self.fileInfo is None or saveas:
-           self.fileInfo = QFileInfo(self.fichier)
-           self.fileInfo.setCaching(0)
+            self.fileInfo = QFileInfo(self.fichier)
+            self.fileInfo.setCaching(0)
         self.lastModified = self.fileInfo.lastModified()
         if newName is not None:
-           self.appliEficas.addToRecentList(newName)
-           self.tree.racine.item.getObject().nom=os.path.basename(newName)
-           self.tree.racine.updateNodeLabel()
+            self.appliEficas.addToRecentList(newName)
+            self.tree.racine.item.getObject().nom=os.path.basename(newName)
+            self.tree.racine.updateNodeLabel()
 
-        #print ('sortie du XML')
-        #self.jdc.toXml()
+
+        if  self.jdc.cata.modeleMetier:self.jdc.toXml(self.fichier)
+        if  self.jdc.cata.modeleMetier and self.jdc.isValid():
+            if self.generator != self.XMLgenerator :
+                self.XMLgenerator.gener(self.jdc)
+                self.XMLgenerator.writeDefault(fn)
 
         if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
         #if hasattr(self.generator, "writeDefault"):
@@ -859,14 +869,14 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
             msgBox.addButton(tr("&Annuler"),2)
             res=msgBox.exec_()
             if res == 0 :
-               self.generator.writeDefault(fn)
-               return (1, self.fichier)
+                self.generator.writeDefault(fn)
+                return (1, self.fichier)
             if res == 2 : return (0, None)
             if self.appliEficas.salome : self.appliEficas.close()
             else : sys.exit(1)
 
         if self.salome :
-               self.appliEficas.addJdcInSalome( self.fichier)
+            self.appliEficas.addJdcInSalome( self.fichier)
         self.modified = 0
         nouveauTitre=self.titre+"              "+str(os.path.basename(self.fichier))
         self.appliEficas.setWindowTitle(nouveauTitre)
@@ -892,8 +902,8 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
             the name of the saved file
         """
         if fileName != None :
-           self.fichier = fileName
-           return self.saveFile()
+            self.fichier = fileName
+            return self.saveFile()
         return self.saveFile(path,1,"beautifie")
 
 
@@ -927,10 +937,10 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
         if not fn : return (0, " ")
         fn=fn[0]
 
-        ulfile = os.path.abspath(six.text_type(fn))
+        ulfile = os.path.abspath(fn)
         self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
 
-        # On utilise le convertisseur defini par format_fichier
+        # On utilise le convertisseur defini par formatFichierIn
         source=self.getSource(ulfile)
         if source:
             # On a reussia convertir le fichier self.ulfile
@@ -947,10 +957,10 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
         CONTEXT.setCurrentStep(etape)
         etape.buildIncludeEtape(texte)
         if not (etape.text_included_converted) :
-           QMessageBox.information( self,
-                      tr("Impossible d importer le texte"),
-                      etape.text_included_error)
-               
+            QMessageBox.information( self,
+                       tr("Impossible d importer le texte"),
+                       etape.text_included_error)
+
         self.tree.racine.buildChildren()
 
     #-----------------------------------#
@@ -959,16 +969,16 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     # ajoute une etape  de JdC a partir d un texte
         monItem=itemApres
         etape=monItem.item.object
-         
+
         CONTEXT.setCurrentStep(etape)
         try :
-          ok=etape.buildIncludeEtape(texte)
+            ok=etape.buildIncludeEtape(texte)
         except :
-          ok=0
+            ok=0
         if not ok :
-           QMessageBox.information( self,
-                      tr("Import texte"),
-                      tr("Impossible d importer le texte"))
+            QMessageBox.information( self,
+                       tr("Import texte"),
+                       tr("Impossible d importer le texte"))
         self.tree.racine.buildChildren()
         return ok
 
@@ -978,13 +988,13 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     # ajoute une etape  de JdC a partir d un texte
         CONTEXT.setCurrentStep(etape)
         try :
-          ok=etape.buildIncludeEtape(texte,doitEtreValide=0)
+            ok=etape.buildIncludeEtape(texte,doitEtreValide=0)
         except :
-          ok=0
+            ok=0
         if not ok :
-           QMessageBox.information( self,
-                      tr("Import texte"),
-                      tr("Impossible d importer le texte"))
+            QMessageBox.information( self,
+                       tr("Import texte"),
+                       tr("Impossible d importer le texte"))
         self.tree.racine.buildChildren()
         return ok
 
@@ -999,196 +1009,197 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     #-----------------------------------------
     def initSplitterSizes(self, nbWidget=3):
     #-----------------------------------------
-       #print ("je passe ds initSplitterSizes", nbWidget)
+        #print ("je passe ds initSplitterSizes", nbWidget)
 
-       if   self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes3=[1,1550,300]
-       #elif self.code in [ 'MAP']            : self.splitterSizes3=[700,300]
-       else                                  : self.splitterSizes3=[150,1000,300]
+        if   self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes3=[1,1550,300]
+        #elif self.code in [ 'MAP']            : self.splitterSizes3=[700,300]
+        else                                  : self.splitterSizes3=[150,1000,300]
 
-       if   self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes2=[5,1500]
-       else                                  : self.splitterSizes2=[300,1000]
+        if   self.code in [ 'Adao', 'ADAO','MAP' ] : 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
-   
+
+        #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
+        #print (newSizes)
+        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]
+        #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
+        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)
+        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)
+        #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
+        #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)
+        #print ('je passe la')
+        #print (self.widgetTree)
+        #self.widgetTree=self.oldWidgetTree
+        self.widgetTree.show()
+        #self.restoreSplitterSizes(3)
 
     #-----------------------
     def getEtapeCourante(self) :
     #-----------------------
-      if len(self.tree.selectedItems()) != 1 : return None
-      etape=self.tree.selectedItems()[0].item.object.getEtape()
-      return etape
+        if len(self.tree.selectedItems()) != 1 : return None
+        etape=self.tree.selectedItems()[0].item.object.getEtape()
+        return etape
     #-----------------------------
     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
+        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
 
     #-------------------#  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)
+
+        #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)
-      print (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)
-       
+
+
+        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)
+        print (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)
+        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.getDico() #generator.Dico
+        if 'dicoImbrique' in generator.plugins:
+            self.generator=generator.plugins['dicoImbrique']()
+            jdc_formate=self.generator.gener(self.jdc)
+            dico=self.getDico() #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]
+            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
+            ###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.getDico()
 
     #-------------------#  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.getDico() #generator.Dico
-         return dico
+        if 'dicoImbrique' in generator.plugins:
+            self.generator=generator.plugins['dicoImbrique']()
+            jdc_formate=self.generator.gener(self.jdc)
+            dico=self.getDico() #generator.Dico
+            return dico
 
 if __name__ == "__main__":
     print ('in main')