]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
les listes. inachevé
authorpascale.noyret <pascale.noyret@edf.fr>
Thu, 12 Nov 2020 08:18:46 +0000 (09:18 +0100)
committerpascale.noyret <pascale.noyret@edf.fr>
Thu, 12 Nov 2020 08:18:46 +0000 (09:18 +0100)
InterfaceQT4/bad1.py [new file with mode: 0644]
InterfaceQT4/composimp.py
InterfaceQT4/eficas_goWeb.py [new file with mode: 0755]
InterfaceQT4/gereListe.py
InterfaceQT4/monWidgetCreeUserAssd.py
InterfaceQT4/monWidgetPlusieursBase.py
InterfaceQT4/monWidgetPlusieursCreeUserAssd.py
InterfaceQT4/monWidgetPlusieursIntoOrdonne.py
InterfaceQT4/monWidgetPlusieursTuple.py
InterfaceQT4/toto.py [new file with mode: 0755]

diff --git a/InterfaceQT4/bad1.py b/InterfaceQT4/bad1.py
new file mode 100644 (file)
index 0000000..978da3e
--- /dev/null
@@ -0,0 +1,222 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2017   EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# Modules Python
+from __future__ import absolute_import
+import types,os,sys
+
+from InterfaceQT4.monWidgetPlusieursCreeUserAssd import MonWidgetPlusieursCreeUserAssd
+
+class MonWidgetPlusieursCreeAssd (MonWidgetPlusieursBase):
+
+  def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+        MonWidgetPlusieursBase.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+        self.etablitOrdre()
+        print ('MonWidgetPlusieursBase', nom)
+
+
+
+#  def setValeurs(self):
+  # uniquement appele a l initialisation.
+  # les lineEdit ont deja ete crees
+#        MonWidgetPlusieursBase.setValeurs(self):
+#       self.listeValeursCourantes=self.node.item.getListeValeurs()
+#       index=1
+#       for valeur in self.listeValeursCourantes :
+#           val = self.politique.getValeurTexte(valeur)
+#           nomLineEdit = "lineEditVal"+str(index)
+#           if hasattr(self,nomLineEdit) : 
+#              courant = getattr(self,nomLineEdit)
+#              if 'R' in self.objSimp.definition.type and str(val) != repr(val) :  courant.setText(repr(val))
+#              else    :  courant.setText(str(val))
+#           else :
+#              self.ajoutLineEdit(val)
+#           index=index+1
+#       if self.indexDernierLabel < self.monSimpDef.max  : self.ajoutLineEdit()
+#       
+#
+#  def ajoutLineEdit(self,valeur=None,):
+#      #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
+#      self.indexDernierLabel=self.indexDernierLabel+1
+#      nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
+#      if hasattr(self,nomLineEdit) : 
+#         #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
+#         self.indexDernierLabel=self.indexDernierLabel-1
+#         return
+#      nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
+#      self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
+#      nouveauLE.setText("")
+#      if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
+#      else :                             nouveauLE.setStyleSheet("background:rgb(235,235,235)")
+#      nouveauLE.setFrame(False)
+#      # fait dans le init pour pouvoir passer le numero du LE mai 20
+#      #nouveauLE.returnPressed.connect(self.changeValeur)
+#
+#      setattr(self,nomLineEdit,nouveauLE)
+#      self.listeAffichageWidget.append(nouveauLE)
+#      self.etablitOrdre()
+#      if valeur != None : 
+#         nouveauLE.setText(str(valeur))
+#         self.dictLE[self.indexDernierLabel] = valeur
+#      else : 
+#         self.dictLE[self.indexDernierLabel] = None
+#      # deux lignes pour que le ensureVisible fonctionne
+#      self.estVisible=nouveauLE
+#      if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
+#      #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
+#
+  def etablitOrdre(self):
+      i=0
+      while(i +1 < len(self.listeAffichageWidget)):
+         self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
+         self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
+         i=i+1
+      # si on boucle on perd l'ordre
+#
+#
+#  
+#  def rendVisibleLigne(self):
+#      QApplication.processEvents()
+#      self.estVisible.setFocus()
+#      self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
+#      
+#
+#  def finCommentaire(self):
+#      return self.finCommentaireListe()
+#
+#  def ajout1Valeur(self,valeur=None):
+#        #import traceback
+#        #traceback.print_stack()
+#        if valeur == None : return
+#        liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
+#        if validite == 0 : return
+#        if liste ==[]    : return
+#        listeVal=[]
+#        for valeur in self.listeValeursCourantes : listeVal.append(valeur)
+#        validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
+#        if (comm2 != "" and comm != None) : return comm2
+#        if validite : 
+#           self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
+#           if len(self.listeValeursCourantes) > self.monSimpDef.min :
+#              self.node.item.setValeur(self.listeValeursCourantes)
+#              self.reaffiche()
+#           return None
+#        else :
+#           return(comm2+" "+comm)
+#        
+#  def reaffiche(self):
+#      # A priori, on ne fait rien
+#      pass
+#
+#                
+#  def ajoutNValeur(self,liste):
+#  #----------------------------
+#  # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
+#  # car alors le temps de verification devient prohibitif  reconstructution et verification a 
+#  # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
+#
+#           
+#        listeFormatee=list(liste)
+#
+#        min,max=self.node.item.getMinMax()
+#        if self.objSimp.valeur == None : listeComplete = listeFormatee
+#        else                           : listeComplete = self.objSimp.valeur + listeFormatee
+#
+#        if len(listeComplete) > max : 
+#           texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
+#           self.editor.afficheInfos(texte,Qt.red)
+#           return
+#
+#        validite,comm,comm2 = self.politique.ajoutNTuple(listeComplete)
+#        if not validite : 
+#           self.editor.afficheInfos(comm2,Qt.red)
+#           return
+#
+#        self.politique.recordValeur(listeComplete)
+#
+#        indexDernierRempli=0
+#        while ( indexDernierRempli < len(liste) ) :
+#         texte=liste[indexDernierRempli]
+#         if indexDernierRempli < self.indexDernierLabel:
+#            nomLineEdit="lineEditVal"+str(indexDernierRempli+1)
+#            courant=getattr(self,nomLineEdit)
+#            courant.setText(str(texte))
+#         else : 
+#            self.ajoutLineEdit(texte)
+#         indexDernierRempli = indexDernierRempli + 1
+#        
+#
+#  def changeValeur(self,changeDePlace=True,oblige=False,numero=None):
+#      #print ('monWidgetPlusieursBase changeValeur')
+#      self.changeUnLineEdit = False
+#      donneFocus=None
+#      derniereValeur=None
+#      self.listeValeursCourantes = []
+#      fin=self.indexDernierLabel
+#
+#      for i in range (1, self.indexDernierLabel+1):
+#          nomLineEdit="lineEditVal"+str(i)
+#          courant=getattr(self,nomLineEdit)
+#          valeur=courant.text()
+#          if valeur != None and valeur != "" : 
+#             # c est ce qui est long mais permet d avoir 
+#             # une bonne connaissance des erreurs
+#             # et de traiter le changede place
+#             commentaire=self.ajout1Valeur(valeur)
+#             if (commentaire != None ):
+#                 self.editor.afficheInfos(commentaire,Qt.red)
+#                 courant.setText("")
+#                 donneFocus=courant
+#                 self.reaffiche()
+#                 return
+#             else :
+#                 self.editor.afficheInfos("")
+#          elif donneFocus==None : donneFocus=courant
+#
+#      nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
+#      dernier=getattr(self,nomDernierLineEdit)
+#      derniereValeur=dernier.text()
+#      if changeDePlace:
+#         if donneFocus != None : 
+#           donneFocus.setFocus()
+#           self.scrollArea.ensureWidgetVisible(donneFocus)
+#         elif self.indexDernierLabel < self.monSimpDef.max  : 
+#           self.ajoutLineEdit()
+#      if self.listeValeursCourantes == [] : return
+#      min,max = self.node.item.getMinMax()
+#      if len(self.listeValeursCourantes) < self.monSimpDef.min  :
+#        self.editor.afficheInfos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
+#      if len(self.listeValeursCourantes) < min and oblige==True: return
+#      if len(self.listeValeursCourantes) > max : return
+#      self.node.item.setValeur(self.listeValeursCourantes)
+#      #print (self.listeValeursCourantes)
+#      if len(self.listeValeursCourantes) == self.monSimpDef.max  :
+#        self.editor.afficheInfos(tr('nb max de valeurs atteint'))
+#      self.setValide()
+#      self.reaffiche()
+#
+#          
+#  def leaveEventScrollArea(self,event):
+#      #print ('monWidgetPlusBase leaveEventScrollArea', self.changeUnLineEdit)
+#      if self.changeUnLineEdit : self.changeValeur(changeDePlace=False)
+#      QScrollArea.leaveEvent(self.scrollArea,event)
+#
+#
+#
+#
index d41e340af0d03fa4f5aa9617133e5c27b7937fd6..29b718a9727e24c8a55382a49dd48f32ce6cbb36 100644 (file)
@@ -241,8 +241,8 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
                   widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
           else :
             if self.item.waitUserAssdEnCreation() : 
-               from InterfaceQT4.monWidgetCreeUserAssd import MonWidgetCreeListeUserAssd
-               widget=MonWidgetCreeListeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+               from InterfaceQT4.monWidgetPlusieursCreeUserAssd import MonWidgetPlusieursCreeUserAssd
+               widget=MonWidgetPlusieursCreeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande)
             elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees)  : 
                from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
                widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
diff --git a/InterfaceQT4/eficas_goWeb.py b/InterfaceQT4/eficas_goWeb.py
new file mode 100755 (executable)
index 0000000..a17ace7
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2017   EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+   from builtins import str
+except : pass
+
+
+import sys,os
+repIni     = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
+ihmQTDir   = os.path.join(repIni,"UiQT5")
+editeurDir = os.path.join(repIni,"Editeur")
+ihmDir     = os.path.join(repIni,"InterfaceQT4")
+
+if ihmDir     not in sys.path : sys.path.append(ihmDir)
+if ihmQTDir   not in sys.path : sys.path.append(ihmQTDir)
+if editeurDir not in sys.path : sys.path.append(editeurDir)
+
+
+def lanceEficas(code=None, multi=False, langue='en', labelCode=None):
+#-------------------------------------------------------------------
+    """
+        Lance l'appli EFICAS avec Ihm
+    """
+    try :
+      from PyQt5.QtWidgets import QApplication
+    except :
+      print('Please, set qt environment')
+      return
+
+    from Editeur  import session
+    options = session.parse(sys.argv)
+    if options.code          != None : code=options.code
+
+    from InterfaceQT4.qtEficas import Appli
+    app = QApplication(sys.argv)
+
+    Eficas=Appli(code=code,salome=0,multi=multi,langue=langue,labelCode=labelCode)
+    Eficas.show()
+
+    res=app.exec_()
+    sys.exit(res)
+
+    
+
index 30750ba5ae7837a6a17bba4943711c66e108b32d..6df0e276c0ed47158a8084d815e540fb838274eb 100644 (file)
@@ -57,7 +57,7 @@ class LECustom(QLineEdit):
      #print ("dans focusInEvent de LECustom")
      self.parentQt.aEuLeFocus=True
      self.aEuLeFocus=True
-     self.parentQt.LineEditEnCours=self
+     self.parentQt.lineEditEnCours=self
      self.parentQt.numLineEditEnCours=self.num
      self.parentQt.textSelected=self.text()
      self.setStyleSheet("border: 2px solid gray")
@@ -104,6 +104,7 @@ class LECustom(QLineEdit):
      return self.valeur
 
  def setValeur(self,valeur):
+     print('uuuuuuuuuuuuuu', valeur)
      self.setText(valeur)
 
 
@@ -188,8 +189,8 @@ class GereListe(object):
        if self.numLineEditEnCours == 1 : return
        else : numEchange=self.numLineEditEnCours-1
        self.echange(self.numLineEditEnCours,numEchange)
-       self.LineEditEnCours.setFocus(True)
-       self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
+       self.lineEditEnCours.setFocus(True)
+       self.scrollArea.ensureWidgetVisible(self.lineEditEnCours)
 
 
    def basPushed(self):
@@ -197,8 +198,8 @@ class GereListe(object):
        if self.numLineEditEnCours == self.indexDernierLabel : return
        else : numEchange=self.numLineEditEnCours+1
        self.echange(self.numLineEditEnCours,numEchange)
-       self.LineEditEnCours.setFocus(True)
-       self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
+       self.lineEditEnCours.setFocus(True)
+       self.scrollArea.ensureWidgetVisible(self.lineEditEnCours)
 
    def echange(self,num1,num2):
        # on donne le focus au a celui ou on a bouge
@@ -212,10 +213,13 @@ class GereListe(object):
        courant2=getattr(self,nomLineEdit2)
        courant.setText(courant2.text())
        courant2.setText(valeurAGarder)
+       # pour monWidgetCreeUserAssd
+       self.num1=num1
+       self.num2=num2
        self.changeValeur(changeDePlace=False)
        self.numLineEditEnCours=num2
-       self.LineEditEnCours=courant2
-       self.LineEditEnCours.setFocus(True)
+       self.lineEditEnCours=courant2
+       self.lineEditEnCours.setFocus(True)
 
    def moinsPushed(self):
        # on supprime le dernier
@@ -276,7 +280,7 @@ class GereListe(object):
              courant.setValeur(valeurADescendre)
              valeurADescendre=valeurAGarder
        self.changeValeur(changeDePlace=False)
-       if hasattr (self, 'LineEditEnCours') :self.scrollArea.ensureWidgetVisible(self.LineEditEnCours)
+       if hasattr (self, 'lineEditEnCours') :self.scrollArea.ensureWidgetVisible(self.lineEditEnCours)
 
    def voisListePushed(self):
        texteValeurs=""
index 3a161d4a2d3ef77e819824345d50c8e1ae24dc13..789f941fa890d7c4b8b1580d667e9bf65db798b2 100644 (file)
@@ -59,126 +59,4 @@ class MonWidgetCreeUserAssd ( MonWidgetSimpTxt):
       self.parentQt.propageChange(self.objSimp.definition.type[0])
       
        
-class MonWidgetCreeListeUserAssd ( MonWidgetPlusieursBase):
-  def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
-      MonWidgetPlusieursBase. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
-      
-  def ajout1Valeur(self,valeur=None):
-      if not valeur in list(self.dictValeurs.keys()):
-         validite,commentaire=self.objSimp.creeUserASSDetSetValeur(valeur)
-         MonWidgetPlusieursBase.ajout1Valeur(self,valeur)
-
-  def changeValeur(self,changeDePlace=False,oblige=False,numero=None):
-      print ('dans changeValeur du CreeUserAssd', changeDePlace,numero)
-      self.changeUnLineEdit=False
-      if numero==None : 
-           self.echangeDeuxValeurs()
-           return
-      valeur = self.lineEditEnEdition.text()
-      #print (valeur)
-      if numero in list(self.dictLE.keys()) :
-         oldValeurUserAssd = self.dictLE[numero] 
-         if oldValeurUserAssd == None or oldValeurUserAssd == "" : enCreation = True
-         else : enCreation = False
-      else                         : 
-         enCreation     = True
-         oldValeurUserAssd =  ""
-      #print ('je traite')
-      if enCreation : validite, objASSD, commentaire=self.objSimp.creeUserASSD(valeur)
-      elif oldValeurUserAssd.nom == valeur : return
-      else :  
-         validite, commentaire=self.node.item.renommeSdCreeDsListe(oldValeurUserAssd,valeur)
-         nomDernierLineEdit="lineEditVal"+str(numero+1)
-         dernier=getattr(self,nomDernierLineEdit)
-         dernier.setFocus()
-         return
-  
-      if commentaire != "" and not validite:
-            self.editor.afficheInfos(commentaire,Qt.red)
-            self.lineEditEnEdition.setText("")
-            return
-      # on relit tout pour tenir compte des lignes blanches 
-      liste=[]
-      for i in range (1, self.indexDernierLabel+1):
-          if i == numero : liste.append(objASSD)
-          if i in list(self.dictLE.keys()) :
-             if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
-      self.node.item.object.state='changed'
-      validite=self.node.item.setValeur(liste)
-      self.setValide()
-      validite=self.node.item.isValid()
-      if validite : 
-         self.dictLE[numero] = objASSD
-         self.node.item.rattacheUserASSD(objASSD)
-         if self.indexDernierLabel < len(liste)  : self.ajoutLineEdit()
-         nomDernierLineEdit="lineEditVal"+str(numero+1)
-         self.listeValeursCourantes=liste
-         dernier=getattr(self,nomDernierLineEdit)
-         dernier.setFocus()
-      else : 
-         self.editor.afficheInfos('ajout impossible' ,Qt.red)
-         if objASSD : objASSD.supprime()
-         self.lineEditEnEdition.setText("")
-      self.parentQt.propageChange(self.objSimp.definition.type[0])
-
-
-  def leaveEventScrollArea(self,event):
-      pass
-
-  def echangeDeuxValeurs(self):
-      self.changeUnLineEdit=False
-      obj1=self.dictLE[self.num1] 
-      obj2=self.dictLE[self.num2] 
-      self.dictLE[self.num1]=obj2
-      self.dictLE[self.num2]=obj1
-      nomLineEdit=self.nomLine+str(self.num1)
-      courant=getattr(self,nomLineEdit)
-      if self.dictLE[self.num1] != None : courant.setText(self.dictLE[self.num1].nom)
-      else : courant.setText("")
-      nomLineEdit=self.nomLine+str(self.num2)
-      courant=getattr(self,nomLineEdit)
-      if self.dictLE[self.num2] != None : courant.setText(self.dictLE[self.num2].nom)
-      else : courant.setText("")
-      liste=[]
-      for i in list(self.dictLE.keys()): 
-             if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
-      validite=self.node.item.setValeur(liste)
-      courant.setFocus(True)
-
-  def descendLesLignes(self):
-      self.changeUnLineEdit=False
-      if self.numlineEditEnCours==self.indexDernierLabel : return
-      nouvelleValeur=None
-      for i in range (self.numlineEditEnCours+1, self.indexDernierLabel):
-             valeurAGarder=self.dictLE[i]
-             self.dictLE[i]=nouvelleValeur
-             nomLineEdit=self.nomLine+str(i)
-             courant=getattr(self,nomLineEdit)
-             if nouvelleValeur != None : courant.setText(nouvelleValeur.nom)
-             else : courant.setText("")
-             nouvelleValeur=valeurAGarder
-      
-
-  def moinsPushed(self):
-     if self.numlineEditEnCours == 0 : return
-     if self.indexDernierLabel == 0 : return
-     objASSD=self.dictLE[self.numlineEditEnCours]
-     if objASSD : objASSD.supprime()
-     self.lineEditEnEdition.setText("")
-
-     #self.dictLE.pop(self.numlineEditEnCours)
-     for i in range (self.numlineEditEnCours, self.indexDernierLabel-1):
-             self.dictLE[i]= self.dictLE[i+1]
-             nomLineEdit=self.nomLine+str(i)
-             courant=getattr(self,nomLineEdit)
-             if self.dictLE[i] != None : courant.setText(self.dictLE[i].nom)
-             else : courant.setText("")
-     nomLineEdit=self.nomLine+str(self.indexDernierLabel)
-     courant=getattr(self,nomLineEdit)
-     courant.setText("")
-     self.dictLE[self.indexDernierLabel]=None
-     liste=[]
-     for i in list(self.dictLE.keys()): 
-          if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
-     validite=self.node.item.setValeur(liste)
 
index e35b243c5e4b2dab082dc5a4e5f8b24f73e66b1a..f8d2593496b873e7dc57a6660dabb474731c18ac 100644 (file)
@@ -55,24 +55,24 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie)
         self.indexDernierLabel=0
         self.numLineEditEnCours=0
         self.listeAffichageWidget=[]
+        self.dictLE={}
         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
         GereListe.__init__(self)
         self.gereIconePlier()
         self.BSelectFichier.clicked.connect(self.selectInFile)
 
-        if sys.platform[0:5]!="linux":
-          repIcon=self.node.editor.appliEficas.repIcon
-          fichier=os.path.join(repIcon, 'arrow_up.png')
-          icon = QIcon(fichier)
-          self.RBHaut.setIcon(icon)
-          self.RBHaut.setIconSize(QSize(32, 32))
-          fichier2=os.path.join(repIcon, 'arrow_down.png')
-          icon2 = QIcon(fichier2)
-          self.RBBas.setIcon(icon2)
-          fichier3=os.path.join(repIcon, 'file-explorer.png')
-          icon3 = QIcon(fichier2)
-          self.BSelectFichier.setIcon(icon3)
-          self.BSelectFichier.setIconSize(QSize(32, 32))
+        repIcon=self.node.editor.appliEficas.repIcon
+        fichier=os.path.join(repIcon, 'arrow_up.png')
+        icon = QIcon(fichier)
+        self.RBHaut.setIcon(icon)
+        self.RBHaut.setIconSize(QSize(32, 32))
+        fichier2=os.path.join(repIcon, 'arrow_down.png')
+        icon2 = QIcon(fichier2)
+        self.RBBas.setIcon(icon2)
+        fichier3=os.path.join(repIcon, 'file-explorer.png')
+        icon3 = QIcon(fichier2)
+        self.BSelectFichier.setIcon(icon3)
+        self.BSelectFichier.setIconSize(QSize(32, 32))
         icon=QIcon(self.repIcon+"/MoinsBleu.png")
         self.RBMoins.setIcon(icon)
         icon=QIcon(self.repIcon+"/PlusBleu.png")
@@ -120,6 +120,7 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie)
               courant=getattr(self,nomLineEdit)
               if 'R' in self.objSimp.definition.type and str(val) != repr(val) :  courant.setText(repr(val))
               else                     :  courant.setText(str(val))
+              self.dictLE[index]=val
            else :
               self.ajoutLineEdit(val)
            index=index+1
@@ -147,7 +148,11 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie)
       setattr(self,nomLineEdit,nouveauLE)
       self.listeAffichageWidget.append(nouveauLE)
       self.etablitOrdre()
-      if valeur != None : nouveauLE.setText(str(valeur))
+      if valeur != None : 
+         nouveauLE.setText(str(valeur))
+         self.dictLE[self.indexDernierLabel] = valeur
+      else : 
+         self.dictLE[self.indexDernierLabel] = None
       # deux lignes pour que le ensureVisible fonctionne
       self.estVisible=nouveauLE
       if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
@@ -258,6 +263,7 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie)
              self.ajoutNValeur(lval[1:])
              self.listeValeursCourantes = []
 
+
       for i in range (1, self.indexDernierLabel+1):
           nomLineEdit="lineEditVal"+str(i)
           courant=getattr(self,nomLineEdit)
index a4f4577ff1806a003b3d1f8cc5c3ce6d8bc46ebc..78226fb995edb7f2eb22198c93dfd92db02a892b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2017   EDF R&D
+# Copyright (C) 2007-2020   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 #
 # Modules Python
 from __future__ import absolute_import
-import types,os,sys
+import types,os
 
-from InterfaceQT4.monWidgetPlusieursCreeUserAssd import MonWidgetPlusieursCreeUserAssd
 
-class MonWidgetPlusieursCreeAssd (MonWidgetPlusieursBase):
+# Modules Eficas
+from Extensions.i18n import tr
+from .monWidgetSimpTxt  import MonWidgetSimpTxt
+from .monWidgetPlusieursBase import MonWidgetPlusieursBase
+from copy import copy,deepcopy
+from PyQt5.QtCore import Qt
 
+
+      
+class MonWidgetPlusieursCreeUserAssd ( MonWidgetPlusieursBase):
   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
-        MonWidgetPlusieursBase.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
-        print ('MonWidgetPlusieursBase', nom)
-#
-#
-#
-#  def setValeurs(self):
-#  # uniquement appele a l initialisation.
-#  # les lineEdit ont deja ete crees
-#       self.listeValeursCourantes=self.node.item.getListeValeurs()
-#       index=1
-#       for valeur in self.listeValeursCourantes :
-#           val = self.politique.getValeurTexte(valeur)
-#           nomLineEdit = "lineEditVal"+str(index)
-#           if hasattr(self,nomLineEdit) : 
-#              courant = getattr(self,nomLineEdit)
-#              if 'R' in self.objSimp.definition.type and str(val) != repr(val) :  courant.setText(repr(val))
-#              else    :  courant.setText(str(val))
-#           else :
-#              self.ajoutLineEdit(val)
-#           index=index+1
-#       if self.indexDernierLabel < self.monSimpDef.max  : self.ajoutLineEdit()
-#       
-#
-#  def ajoutLineEdit(self,valeur=None,):
-#      #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
-#      self.indexDernierLabel=self.indexDernierLabel+1
-#      nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
-#      if hasattr(self,nomLineEdit) : 
-#         #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
-#         self.indexDernierLabel=self.indexDernierLabel-1
-#         return
-#      nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
-#      self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
-#      nouveauLE.setText("")
-#      if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
-#      else :                             nouveauLE.setStyleSheet("background:rgb(235,235,235)")
-#      nouveauLE.setFrame(False)
-#      # fait dans le init pour pouvoir passer le numero du LE mai 20
-#      #nouveauLE.returnPressed.connect(self.changeValeur)
-#
-#      setattr(self,nomLineEdit,nouveauLE)
-#      self.listeAffichageWidget.append(nouveauLE)
-#      self.etablitOrdre()
-#      if valeur != None : 
-#         nouveauLE.setText(str(valeur))
-#         self.dictLE[self.indexDernierLabel] = valeur
-#      else : 
-#         self.dictLE[self.indexDernierLabel] = None
-#      # deux lignes pour que le ensureVisible fonctionne
-#      self.estVisible=nouveauLE
-#      if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
-#      #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
-#
-#  def etablitOrdre(self):
-#      i=0
-#      while(i +1 < len(self.listeAffichageWidget)):
-#         self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
-#         self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
-#         i=i+1
-#      # si on boucle on perd l'ordre
-#
-#
-#  
-#  def rendVisibleLigne(self):
-#      QApplication.processEvents()
-#      self.estVisible.setFocus()
-#      self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
-#      
-#
-#  def finCommentaire(self):
-#      return self.finCommentaireListe()
-#
-#  def ajout1Valeur(self,valeur=None):
-#        #import traceback
-#        #traceback.print_stack()
-#        if valeur == None : return
-#        liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
-#        if validite == 0 : return
-#        if liste ==[]    : return
-#        listeVal=[]
-#        for valeur in self.listeValeursCourantes : listeVal.append(valeur)
-#        validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
-#        if (comm2 != "" and comm != None) : return comm2
-#        if validite : 
-#           self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
-#           if len(self.listeValeursCourantes) > self.monSimpDef.min :
-#              self.node.item.setValeur(self.listeValeursCourantes)
-#              self.reaffiche()
-#           return None
-#        else :
-#           return(comm2+" "+comm)
-#        
-#  def reaffiche(self):
-#      # A priori, on ne fait rien
-#      pass
-#
-#                
-#  def ajoutNValeur(self,liste):
-#  #----------------------------
-#  # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
-#  # car alors le temps de verification devient prohibitif  reconstructution et verification a 
-#  # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
-#
-#           
-#        listeFormatee=list(liste)
-#
-#        min,max=self.node.item.getMinMax()
-#        if self.objSimp.valeur == None : listeComplete = listeFormatee
-#        else                           : listeComplete = self.objSimp.valeur + listeFormatee
-#
-#        if len(listeComplete) > max : 
-#           texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
-#           self.editor.afficheInfos(texte,Qt.red)
-#           return
-#
-#        validite,comm,comm2 = self.politique.ajoutNTuple(listeComplete)
-#        if not validite : 
-#           self.editor.afficheInfos(comm2,Qt.red)
-#           return
-#
-#        self.politique.recordValeur(listeComplete)
-#
-#        indexDernierRempli=0
-#        while ( indexDernierRempli < len(liste) ) :
-#         texte=liste[indexDernierRempli]
-#         if indexDernierRempli < self.indexDernierLabel:
-#            nomLineEdit="lineEditVal"+str(indexDernierRempli+1)
-#            courant=getattr(self,nomLineEdit)
-#            courant.setText(str(texte))
-#         else : 
-#            self.ajoutLineEdit(texte)
-#         indexDernierRempli = indexDernierRempli + 1
-#        
-#
-#  def changeValeur(self,changeDePlace=True,oblige=False,numero=None):
-#      #print ('monWidgetPlusieursBase changeValeur')
-#      self.changeUnLineEdit = False
-#      donneFocus=None
-#      derniereValeur=None
-#      self.listeValeursCourantes = []
-#      fin=self.indexDernierLabel
-#
-#      for i in range (1, self.indexDernierLabel+1):
-#          nomLineEdit="lineEditVal"+str(i)
-#          courant=getattr(self,nomLineEdit)
-#          valeur=courant.text()
-#          if valeur != None and valeur != "" : 
-#             # c est ce qui est long mais permet d avoir 
-#             # une bonne connaissance des erreurs
-#             # et de traiter le changede place
-#             commentaire=self.ajout1Valeur(valeur)
-#             if (commentaire != None ):
-#                 self.editor.afficheInfos(commentaire,Qt.red)
-#                 courant.setText("")
-#                 donneFocus=courant
-#                 self.reaffiche()
-#                 return
-#             else :
-#                 self.editor.afficheInfos("")
-#          elif donneFocus==None : donneFocus=courant
-#
-#      nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
-#      dernier=getattr(self,nomDernierLineEdit)
-#      derniereValeur=dernier.text()
-#      if changeDePlace:
-#         if donneFocus != None : 
-#           donneFocus.setFocus()
-#           self.scrollArea.ensureWidgetVisible(donneFocus)
-#         elif self.indexDernierLabel < self.monSimpDef.max  : 
-#           self.ajoutLineEdit()
-#      if self.listeValeursCourantes == [] : return
-#      min,max = self.node.item.getMinMax()
-#      if len(self.listeValeursCourantes) < self.monSimpDef.min  :
-#        self.editor.afficheInfos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
-#      if len(self.listeValeursCourantes) < min and oblige==True: return
-#      if len(self.listeValeursCourantes) > max : return
-#      self.node.item.setValeur(self.listeValeursCourantes)
-#      #print (self.listeValeursCourantes)
-#      if len(self.listeValeursCourantes) == self.monSimpDef.max  :
-#        self.editor.afficheInfos(tr('nb max de valeurs atteint'))
-#      self.setValide()
-#      self.reaffiche()
-#
-#          
-#  def leaveEventScrollArea(self,event):
-#      #print ('monWidgetPlusBase leaveEventScrollArea', self.changeUnLineEdit)
-#      if self.changeUnLineEdit : self.changeValeur(changeDePlace=False)
-#      QScrollArea.leaveEvent(self.scrollArea,event)
-#
-#
-#
-#
+      MonWidgetPlusieursBase. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+      self.etablitOrdre()
+      
+  def ajout1Valeur(self,valeur=None):
+      if not valeur in list(self.dictValeurs.keys()):
+         validite,commentaire=self.objSimp.creeUserASSDetSetValeur(valeur)
+         MonWidgetPlusieursBase.ajout1Valeur(self,valeur)
+
+  #def changeValeur(self,changeDePlace=False,oblige=False,numero=None):
+  def changeValeur(self,changeDePlace=False,oblige=False ):
+      print ('dans changeValeur du CreeUserAssd', changeDePlace, self.numLineEditEnCours)
+      self.changeUnLineEdit=False
+      valeur = self.lineEditEnCours.text()
+      if self.numLineEditEnCours in list(self.dictLE.keys()) :
+         oldValeurUserAssd = self.dictLE[self.numLineEditEnCours] 
+         if oldValeurUserAssd == None or oldValeurUserAssd == "" : enCreation = True
+         else : enCreation = False
+      else                         : 
+         enCreation     = True
+         oldValeurUserAssd =  ""
+      if enCreation : validite, objASSD, commentaire=self.objSimp.creeUserASSD(valeur)
+      elif oldValeurUserAssd.nom == valeur : self.selectionneNext();return
+      else :  
+         validite, commentaire=self.node.item.renommeSdCreeDsListe(oldValeurUserAssd,valeur)
+         nomDernierLineEdit="lineEditVal"+str(self.numLineEditEnCours+1)
+         dernier=getattr(self,nomDernierLineEdit)
+         dernier.setFocus()
+         return
+  
+      if commentaire != "" and not validite:
+            self.editor.afficheInfos(commentaire,Qt.red)
+            self.lineEditEnCours.setText("")
+            return
+      # on relit tout pour tenir compte des lignes blanches 
+      liste=[]
+      for i in range (1, self.indexDernierLabel+1):
+          if i == self.numLineEditEnCours : liste.append(objASSD)
+          if i in list(self.dictLE.keys()) :
+             if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+      self.node.item.object.state='changed'
+      validite=self.node.item.setValeur(liste)
+      self.setValide()
+      validite=self.node.item.isValid()
+      if validite : 
+         self.dictLE[self.numLineEditEnCours] = objASSD
+         self.node.item.rattacheUserASSD(objASSD)
+         if self.indexDernierLabel < len(liste)  : self.ajoutLineEdit()
+         nomDernierLineEdit="lineEditVal"+str(self.numLineEditEnCours+1)
+         self.listeValeursCourantes=liste
+         dernier=getattr(self,nomDernierLineEdit)
+         dernier.setFocus()
+      else : 
+         self.editor.afficheInfos('ajout impossible' ,Qt.red)
+         if objASSD : objASSD.supprime()
+         self.lineEditEnCours.setText("")
+      self.parentQt.propageChange(self.objSimp.definition.type[0])
+      self.selectionneNext()
+
+  def selectionneNext(self):
+      print ('a programmer')
+
+  def leaveEventScrollArea(self,event):
+      pass
+
+  def echangeDeuxValeurs(self):
+      self.changeUnLineEdit=False
+      obj1=self.dictLE[self.num1] 
+      obj2=self.dictLE[self.num2] 
+      self.dictLE[self.num1]=obj2
+      self.dictLE[self.num2]=obj1
+      nomLineEdit=self.nomLine+str(self.num1)
+      courant=getattr(self,nomLineEdit)
+      if self.dictLE[self.num1] != None : courant.setText(self.dictLE[self.num1].nom)
+      else : courant.setText("")
+      nomLineEdit=self.nomLine+str(self.num2)
+      courant=getattr(self,nomLineEdit)
+      if self.dictLE[self.num2] != None : courant.setText(self.dictLE[self.num2].nom)
+      else : courant.setText("")
+      liste=[]
+      for i in list(self.dictLE.keys()): 
+             if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+      validite=self.node.item.setValeur(liste)
+      courant.setFocus(True)
+
+  def descendLesLignes(self):
+      self.changeUnLineEdit=False
+      if self.numlineEditEnCours==self.indexDernierLabel : return
+      nouvelleValeur=None
+      for i in range (self.numlineEditEnCours+1, self.indexDernierLabel):
+             valeurAGarder=self.dictLE[i]
+             self.dictLE[i]=nouvelleValeur
+             nomLineEdit=self.nomLine+str(i)
+             courant=getattr(self,nomLineEdit)
+             if nouvelleValeur != None : courant.setText(nouvelleValeur.nom)
+             else : courant.setText("")
+             nouvelleValeur=valeurAGarder
+      
+
+  def moinsPushed(self):
+     if self.numlineEditEnCours == 0 : return
+     if self.indexDernierLabel == 0 : return
+     objASSD=self.dictLE[self.numlineEditEnCours]
+     if objASSD : objASSD.supprime()
+     self.lineEditEnEdition.setText("")
+
+     #self.dictLE.pop(self.numlineEditEnCours)
+     for i in range (self.numlineEditEnCours, self.indexDernierLabel-1):
+             self.dictLE[i]= self.dictLE[i+1]
+             nomLineEdit=self.nomLine+str(i)
+             courant=getattr(self,nomLineEdit)
+             if self.dictLE[i] != None : courant.setText(self.dictLE[i].nom)
+             else : courant.setText("")
+     nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+     courant=getattr(self,nomLineEdit)
+     courant.setText("")
+     self.dictLE[self.indexDernierLabel]=None
+     liste=[]
+     for i in list(self.dictLE.keys()): 
+          if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+     validite=self.node.item.setValeur(liste)
+
index 2668376e579abffb8a502359b715f3d54a4a15fa..10c0407c5bb1db9db5145bebed9c43b1a36b5db3 100644 (file)
@@ -65,15 +65,15 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere
         if len(self.listeAAfficher) < 20 : self.frameRecherche2.close()
         if len(self.listeAAfficher) < 20 : self.frameRecherche.close()
         self.adjustSize()
-        if sys.platform[0:5]!="linux":
-          repIcon=self.node.editor.appliEficas.repIcon
-          fichier=os.path.join(repIcon, 'arrow_up.png')
-          icon = QIcon(fichier)
-          self.RBHaut.setIcon(icon)
-          self.RBHaut.setIconSize(QSize(32, 32))
-          fichier2=os.path.join(repIcon, 'arrow_down.png')
-          icon2 = QIcon(fichier2)
-          self.RBBas.setIcon(icon2)
+        #if sys.platform[0:5]!="linux":
+        repIcon=self.node.editor.appliEficas.repIcon
+        fichier=os.path.join(repIcon, 'arrow_up.png')
+        icon = QIcon(fichier)
+        self.RBHaut.setIcon(icon)
+        self.RBHaut.setIconSize(QSize(32, 32))
+        fichier2=os.path.join(repIcon, 'arrow_down.png')
+        icon2 = QIcon(fichier2)
+        self.RBBas.setIcon(icon2)
         icon=QIcon(self.repIcon+"/MoinsBleu.png")
         self.RBMoins.setIcon(icon)
         icon=QIcon(self.repIcon+"/PlusBleu.png")
@@ -109,7 +109,11 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere
           return
        self.filtreListe()
        if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
-       else : self.setMinimumHeight(len(self.listeAAfficher)*30)
+       else : 
+         if self.monSimpDef.min > len(self.listeAAfficher) : self.setMinimumHeight(self.monSimpDef.min*30+30)
+         elif self.monSimpDef.max > len(self.listeAAfficher) : self.setMinimumHeight(400)
+         else self.setMinimumHeight(len(self.listeAAfficher)*30+30) 
+       self.adjustSize()
 
        self.politique=PolitiquePlusieurs(self.node,self.editor)
        for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i)
index c1c2d0ed099bfaa1e66c84af9e8f8f4be880c1c6..3d1b7889cd9e89f0bf6fdc119132092cc1859313 100644 (file)
@@ -404,7 +404,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
        courant2.setText(valeurAGarder)
        self.changeValeur(changeDePlace=True)
        self.numLineEditEnCours=num2
-       self.LineEditEnCours=courant2
+       self.lineEditEnCours=courant2
        courant2.lineEditVal_1.setFocus(True)
 
   def ajoutNValeur(self,liste):
diff --git a/InterfaceQT4/toto.py b/InterfaceQT4/toto.py
new file mode 100755 (executable)
index 0000000..4eab0f7
--- /dev/null
@@ -0,0 +1,1098 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2013   EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# 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 traceback
+
+# Modules Eficas
+
+import convert, generator
+from Editeur        import session
+from Editeur        import comploader
+from Editeur        import Objecttreeitem
+
+DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
+debug = False
+
+
+
+class JDCEditorSsIhm :
+# ------------------- #
+    """
+       Editeur de jdc
+    """
+
+# ---------------------------------------------
+# Methodes Communes ou appelees depuis avec Ihm
+# ---------------------------------------------
+
+    def __init__ (self,appliEficas,fichier = None, jdc = None,  units = None, include=0 ):
+    #-----------------------------------------------------------------------------------#
+    # paticularisee avec Ihm
+
+        if debug : print ('dans le init de JDCEditorSsIhm')
+        self.appliEficas = appliEficas
+        self.fichier     = fichier
+        self.fichierComplet   = fichier
+        self.extensionFichier = os.path.splitext(fichier)[1]
+        self.jdc         = jdc
+        self.first      = True
+        self.jdc_item    = None
+        self.dicoNouveauxMC   = {}
+        self.dicoNouveauxFact = {}
+        self.dict_reels       = {}
+        self.liste_simp_reel  = []
+
+        if self.appliEficas != None : self.salome =  self.appliEficas.salome
+        else             : self.salome =  0
+
+        # ces attributs sont mis a jour par definitCode appelee par newEditor
+        self.code              = self.appliEficas.maConfiguration.code
+        self.maConfiguration   = self.appliEficas.maConfiguration
+
+
+        if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.readercata.demandeCatalogue==True or self.appliEficas.multi==True:
+           if self.maConfiguration.typeDeCata == 'XML' :
+              from InterfaceQT4   import readercataXML as readercata
+           else :
+              from InterfaceQT4   import readercata
+           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.fichierCata == None : return    #Sortie Salome
+        self.titre=self.readercata.titre
+
+        self.formatFichierOut =  self.appliEficas.formatFichierOut
+        self.formatFichierIn  =  self.appliEficas.formatFichierIn
+
+        if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
+        self.dict_reels={}
+        self.liste_simp_reel=[]
+        self.dicoNouveauxMC={}
+        self.dicoNouveauxFact={}
+
+
+        try:
+          self.maConfiguration.generator_module
+          _module = __import__(self.maConfiguration.generator_module)
+          info    = _module.entryPoint()
+          generator.plugins.addEntryPoint(info)
+        except:
+          pass
+
+        try:
+          self.maConfiguration.convert_module
+          #print self.maConfiguration.convert_module
+          _module = __import__(self.maConfiguration.convert_module)
+          info = _module.entryPoint()
+          convert.plugins.addEntryPoint(info)
+        except :
+          pass
+
+        self.maConfiguration.mesGenerators     = generator
+        self.maConfiguration.mesconvertisseurs = convert
+        try    : self.XMLReader=convert.plugins['xml']()
+        except : self.XMLReader=None
+        try    : self.XMLgenerator=generator.plugins['xml']()
+        except : self.XMLgenerator=None
+        
+
+        if self.formatFichierOut in generator.plugins.keys():
+           self.generator = generator.plugins[self.formatFichierOut]()
+
+
+        self.fileInfo       = None
+        self.lastModified   = 0
+
+        self.modified   = False
+        self.isReadOnly = False
+
+        #------- construction du jdc --------------
+
+
+        self.nouveau=0
+        if self.fichier is not None:        #  fichier jdc fourni
+            if jdc==None :
+               #print ('PNPN : chgt try en if')
+               try :
+               #if 1 :
+                   self.jdc = self.readFile(self.fichier)
+               except :
+                   print ("mauvaise lecture du fichier")
+               if self.salome :
+                  try    : self.appliEficas.addJdcInSalome( self.fichier)
+                  except : print ("mauvais enregistrement dans Salome")
+            else :
+               self.jdc=jdc
+
+            if self.jdc is not None and units is not None:
+               self.jdc.recorded_units=units
+               self.jdc.old_recorded_units=units
+
+        else:
+            if not self.jdc:                   #  nouveau jdc
+                if not include : self.jdc = self._newJDC(units=units)
+                else : self.jdc = self._newJDCInclude(units=units)
+                self.nouveau=1
+
+        if self.jdc:
+            self.jdc.editor = self
+            self.jdc.lang    = self.appliEficas.langue
+            self.jdc.aReafficher=False
+            txt_exception  = None
+            if not jdc:            
+                if self.extensionFichier == '.xml' :
+                   if self.appliEficas.maConfiguration.withXSD: self.jdc.analyseXML()
+                   else : print ('run MDM with -x option  (MDM for XML)'); exit()
+                else : self.jdc.analyse()
+                txt_exception = self.jdc.cr.getMessException()
+            if txt_exception :
+                self.jdc = None
+                self.informe('pb chargement jdc',txt_exception)
+            #else:
+                #comploader.chargerComposants()
+                #self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+
+    #-------------------------------#
+    def readFile(self, fn):
+    #--------------------------------#
+        """
+        Public slot to read the text from a file.
+        @param fn filename to read from (string or QString)
+        """
+
+        # charge un JDC
+        # paticularisee avec Ihm
+
+        fn = str(fn)
+        jdcName=os.path.basename(fn)
+
+        # Il faut convertir le contenu du fichier en fonction du format
+        formatIn=self.appliEficas.formatFichierIn
+        if self.extensionFichier == '.xml' and self.appliEficas.maConfiguration.withXSD: formatIn='xml'
+        if formatIn in convert.plugins:
+             # Le convertisseur existe on l'utilise
+             p=convert.plugins[formatIn]()
+             p.readfile(fn)
+             if p.text=="" : self.nouveau=1
+             #print ('PNPN --> CIST a faire')
+             #print ('PNPN --> XML a faire')
+             if formatIn != 'xml': 
+                pareil,texteNew=self.verifieChecksum(p.text)
+                if not pareil :
+                   self.informe(("fichier modifie"),("Attention! fichier change hors EFICAS"),False)
+                p.text=texteNew
+                memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
+                if memeVersion == 0 : 
+                   texteNew=self.traduitCatalogue(texteNew)
+                   p.text=texteNew
+             text=p.convert('exec',self.appliEficas)
+             if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
+        else :
+            self.afficheInfos("Type de fichier non reconnu",'red')
+            self.informe( "Type de fichier non reconnu",
+                    "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
+            return None
+
+        CONTEXT.unsetCurrentStep()
+
+        #jdc=self.readercata.cata[0].JdC(procedure=text,
+        jdc=self.readercata.cata.JdC(procedure=text,
+                                    appliEficas=self.appliEficas,
+                                    cata=self.readercata.cata,
+                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                    nom=jdcName,
+                                    rep_mat=self.maConfiguration.rep_mat
+                                   )
+        self.modified = False
+        return jdc
+
+
+    #--------------------------------#
+    def _newJDC( self ,units = None):
+    #--------------------------------#
+        """
+        Initialise un nouveau JDC vierge
+        """
+        self.modified=1
+        CONTEXT.unsetCurrentStep()
+
+        texte=""
+        if self.code == "CARMELCND" : texte=self._newJDCCND()
+        if self.code == "ZCRACKS" : texte=self._newZCRACKS()
+        if self.code == "PSEN"    : texte = self._newPSEN()
+        if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
+
+        if hasattr(self.readercata.cata,'TEXTE_NEW_JDC') : texte=self.readercata.cata.TEXTE_NEW_JDC
+
+
+        jdc=self.readercata.cata.JdC( procedure =texte,
+                                         appliEficas=self.appliEficas,
+                                         cata=self.readercata.cata,
+                                         cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                         rep_mat=self.maConfiguration.rep_mat
+                                        )
+
+        jdc.lang    = self.appliEficas.langue
+        if units is not None:
+           jdc.recorded_units=units
+           jdc.old_recorded_units=units
+        # chgt le 15/10/19 
+        # Attention positionne  contexte ?
+        # est ce qu on ne doit pas changer le format en Accas si on vient d accas ?
+        jdc.editor=self
+        return jdc
+
+   #--------------------------------#
+    def _newJDCInclude( self ,units = None):
+    #--------------------------------#
+        """
+        Initialise un nouveau JDC vierge
+        """
+        import Extensions.jdc_include
+        JdC_aux=Extensions.jdc_include.JdC_include
+        CONTEXT.unsetCurrentStep()
+
+        #jaux=self.readercata.cata[0].JdC( procedure="",
+        jaux=self.readercata.cata.JdC( procedure="",
+                               appliEficas=self.appliEficas,
+                               cata=self.readercata.cata,
+                               cata_ord_dico=self.readercata.cata_ordonne_dico,
+                               rep_mat=self.maConfiguration.rep_mat,
+                              )
+        jaux.editor=self
+        jaux.analyse()
+
+        J=JdC_aux( procedure="",
+                   appliEficas=self.appliEficas,
+                   cata=self.readercata.cata,
+                   cata_ord_dico=self.readercata.cata_ordonne_dico,
+                   jdc_pere=jaux,
+                   rep_mat=self.maConfiguration.rep_mat,
+                   )
+        J.editor=self
+        J.analyse()
+        if units is not None:
+           J.recorded_units=units
+           J.old_recorded_units=units
+        return J
+
+
+
+    #-----------------------#
+    def getSource(self,file):
+    #-----------------------#
+
+        # Il faut convertir le contenu du fichier en fonction du format
+        if self.formatFichierIn in convert.plugins :
+            # Le convertisseur existe on l'utilise
+            p=convert.plugins[self.formatFichierIn]()
+            p.readfile(file)
+            text=p.convert('execnoparseur')
+            if not p.cr.estvide():
+                self.afficheInfos("Erreur a la conversion",'red')
+            return text
+        else:
+            # Il n'existe pas c'est une erreur
+            self.afficheInfos("Type de fichier non reconnu",'red')
+            self.informe( "Type de fichier non reconnu",
+                    "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
+            return None
+
+    #----------------------------------------------#
+    def __generateTempFilename(self, prefix, suffix):
+    #----------------------------------------------#
+        import tempfile
+        (fd, filename) = tempfile.mkstemp(prefix=prefix, suffix=suffix)
+        os.close(fd)
+        return filename
+
+    #-----------------------#
+    def generDico(self):
+    #-----------------------#
+       if 'dico' in generator.plugins:
+         self.generator=generator.plugins['dico']()
+         #print (self.generator)
+         jdc_formate=self.generator.gener(self.jdc)
+         #print (jdc_formate)
+         dico=self.generator.Dico
+         #print (dico)
+         return dico
+
+    #-----------------------#
+    def viewJdcSource(self):
+    #-----------------------#
+        if self.fichier == None : return
+        if os.path.isfile(self.fichier):
+           f=open(self.fichier,'r')
+           texteSource=f.read()
+           f.close()
+           self._viewText(texteSource, "JDC_SOURCE")
+        else :
+           self._viewText("file doesn't exist", "JDC_SOURCE")
+
+
+    #-----------------------#
+    def viewJdcPy(self):
+    #-----------------------#
+        strSource = str( self.getTextJDC(self.formatFichierOut) )
+        self._viewText(strSource, "JDC_RESULTAT")
+
+    #-----------------------#
+    def viewJdcRapport(self):
+    #-----------------------#
+        # on ajoute les regles
+        strRapport = str( self.jdc.report() )
+        self._viewText(strRapport, "JDC_RAPPORT")
+
+    #-----------------------#
+    def viewJdcRegles(self):
+    #-----------------------#
+        # on ajoute les regles
+        texte_global, test_global =  self.jdc.verifRegles() 
+        self._viewText(texte_global, "JDC_REGLES")
+
+    #-----------------------#
+    def getJdcRapport(self):
+    #-----------------------#
+        # on ajoute les regles
+        strRapport = str( self.jdc.report() )
+        return strRapport
+
+    #---------------------#
+    def getFileName(self):
+    #---------------------#
+      return self.fichier
+
+    #-------------------#
+    def initModif(self):
+    #-------------------#
+      """
+          Met l'attribut modified a 'o' : utilise par Eficas pour savoir
+          si un JDC doit etre sauvegarde avant destruction ou non
+      """
+      self.modified = True
+
+
+    #--------------------------------------------------#
+    def writeFile(self, fn, txt = None,formatLigne="beautifie"):
+    #--------------------------------------------------#
+        """
+        Public slot to write the text to a file.
+
+        @param fn filename to write to string
+        @return flag indicating success
+        """
+
+        fn = str(fn)
+
+        if txt == None :
+            txt = self.getTextJDC(self.formatFichierOut,formatLigne=formatLigne)
+            eol = '\n'
+            if len(txt) >= len(eol):
+               if txt[-len(eol):] != eol:
+                  txt += eol
+            else:
+                txt += eol
+            txt=self.ajoutVersionCataDsJDC(txt)
+            if self.code != 'PSEN' and self.code != 'PSEN_N1' : checksum=self.getChecksum(txt)
+            else : checksum=''
+            txt=txt+checksum
+        if self.code=="TELEMAC" : return 1
+        try:
+            f = open(fn, 'w')
+            f.write(txt)
+            f.close()
+            return 1
+        except IOError as why:
+            print('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :'  , str(why))
+            self.afficheInfos('Le fichier'+str(fn) + 'n a pas pu etre sauvegarde '  , 'red')
+            return 0
+           
+
+    #-----------------------------------------------------------#
+    def getTextJDC(self,format = None,pourRun=0,formatLigne="beautifie"):
+    #-----------------------------------------------------------#
+      if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+      if format == None : format = self.formatFichierOut
+      if format in generator.plugins:
+
+         # Le generateur existe on l'utilise
+         self.generator=generator.plugins[format]()
+         try :
+            jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+            if pourRun : jdc_formate=self.generator.textePourRun
+            if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
+         except ValueError as e:
+            self.informe( "Erreur a la generation",str(e),'red')
+            return
+
+         if not self.generator.cr.estvide():
+            self.informe("Erreur a la generation","EFICAS ne sait pas convertir ce JDC",'red')
+            return ""
+         else:
+            return jdc_formate
+      else:
+         # Il n'existe pas c'est une erreur
+         self.informe("Format inconnu", self.format +  " non reconnu" )
+         return ""
+
+    #------------------------------#
+    def verifieChecksum(self,text):
+    #------------------------------#
+    # Attention : souci sous Windows
+    #
+        indexDeb=text.find("#CHECKSUM:")
+        if indexDeb < 0 : return 1, text
+        indexFin=text.find(":FIN CHECKSUM")
+        checkAvant=text[indexDeb:indexFin+13]
+        textJDC=text[0:indexDeb]+text[indexFin+13:-1]
+        if self.code != 'PSEN'  and self.code != 'PSEN_N1':
+           checksum=self.getChecksum(textJDC)
+           pareil=(checkAvant==checksum)
+        else :
+           pareil=1
+        return pareil, textJDC
+
+    #---------------------------#
+    def getChecksum(self,texte):
+    #---------------------------#
+        newtexte=texte.replace('"','\\"')
+        commande='echo "'+newtexte+'"|md5sum'
+        a=os.popen(commande)
+        checksum=a.read()
+        a.close()
+        ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+        return ligne
+
+    #----------------------#
+    def getDico(self):
+    #---------------------#
+      if 'dicoImbrique' in generator.plugins:
+         self.generator=generator.plugins['dicoImbrique']()
+         #print (self.generator)
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.generator.Dico
+         return dico
+      else :
+         self.afficheInfos(tr("Format %s non reconnu" , 'Dictionnaire Imbrique' ),'red')
+         return ""
+
+   #-----------------------------------------#
+    def chercheGroupes(self):
+    #-----------------------------------------#
+        listeMA,listeNO=self.getTextJDC("GroupMA")
+        return listeMA,listeNO
+
+    #-----------------------------------------#
+    def chercheDico(self):
+    #-----------------------------------------#
+        dicoCourant={}
+        format =  self.appliEficas.formatFichierOut
+        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.maConfiguration)
+           dicoCourant=self.generator.dico
+        return dicoCourant
+
+    #-----------------------------------------------------------------#
+    def saveFileLegerAs(self, fileName = None) :
+    #-----------------------------------------------------------------#
+        if fileName != None :
+           self.fichier = fileName
+           return self.saveFileLeger(fileName)
+        return self.saveFileLeger()
+
+    #-----------------------------------------------------------------#
+    def saveFileComplet(self, fichier = None, formatLigne="beautifie"):
+    #-----------------------------------------------------------------#
+        fn = fichier
+        self.generator=generator.plugins[self.format]()
+        print (self.generator)
+        if hasattr(self.generator, "writeComplet"):
+            self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+
+
+# ---------------------------------------------
+# Methodes Surchargees par avecIhm
+# ---------------------------------------------
+
+    #--------------------------------#
+    def ajoutCommentaire(self):
+    #--------------------------------#
+      print ('pas programme sans Ihm')
+      print ('prevenir la maintenance du besoin')
+
+
+    #--------------------------------------#
+    def informe(self,titre,txt,critique=True):
+    #--------------------------------------#
+    # methode differenre avec et sans ihm
+      if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+      print (titre)
+      print (txt)
+      if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+
+    #--------------------------------------#
+    def afficheInfos(self,txt,couleur=None):
+    #--------------------------------------#
+    # methode differenre avec et sans ihm
+      print (txt)
+
+    #-----------------------------------------------------------------------#
+    def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
+    #--------------------------------------------------------------------#
+        print ('_____________________________')
+        print (txt)
+        print ('_____________________________')
+
+
+    #-----------------------------------------------------------------#
+    def saveFile(self, fichier, formatLigne="beautifie"):
+    #-----------------------------------------------------------------#
+        """
+        Public slot to save the text to a file.
+
+        @param path directory to save the file in (string or QString)
+        @return tuple of two values (boolean, string) giving a success indicator and
+            the name of the saved file
+        """
+
+
+        if  self.jdc.cata.modeleMetier and self.jdc.isValid():
+            if self.generator != self.XMLgenerator :
+               self.XMLgenerator.gener(self.jdc)
+               self.XMLgenerator.writeDefault(fichier)
+        if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
+        self.fichierOut = fichier
+
+        if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
+            self.generator.writeDefault(fichier)
+        elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
+            self.generator.writeDefault(fichier)
+
+        self.modified = 0
+
+        return (1, self.fichier)
+#
+
+    #----------------------------------------------#
+    def sauveLigneFile(self):
+    #----------------------------------------------#
+        self.modified=1
+        return self.saveFile(formatLigne="Ligne")
+
+
+    #-----------------------------------#
+    def updateJdc(self, itemApres,texte):
+    #------------------------------------#
+    # ajoute une etape  de JdC a partir d un texte
+        monItem=itemApres
+        etape=monItem.item.object
+        CONTEXT.setCurrentStep(etape)
+        etape.buildIncludeInclude(texte)
+        self.tree.racine.buildChildren()
+
+    #-----------------------------------#
+    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)
+        try :
+          ok=etape.build_includeEtape(texte)
+        except :
+          ok=0
+        if not ok :
+           QMessageBox.information( self,
+                      tr("Import texte"),
+                      tr("Impossible d importer le texte"))
+        self.tree.racine.build_children()
+        return ok
+
+
+
+    #-------------------------------------#
+    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.getChild(mot,restreint="oui")
+        monMC=ouChercher.getChild(MCFils,restreint="oui")
+        if monMC != None :  ouChercher.suppentite(monMC)
+        ouChercher.state='changed'
+        ouChercher.isvalid()
+
+    #--------------------------------------------------------#
+    def ajoutMC(self,etape,MCFils,valeurs,listeAvant=()):
+    #--------------------------------------------------------#
+    # dans le JDC
+        debug=False
+        if debug : print ('ajoutMC', etape,MCFils,valeurs,listeAvant)
+        ouChercher=etape
+        if debug : print (ouChercher)
+        for mot in listeAvant :
+           ouChercher=ouChercher.getChild(mot,restreint="oui")
+        monMC=ouChercher.getChild(MCFils,restreint="oui")
+        if monMC == None : monMC = ouChercher.addEntite(MCFils)
+        monMC.valeur=valeurs
+        monMC.val=valeurs
+        monMC.state='changed'
+        monMC.isvalid()
+        return 1
+
+    #--------------------------------------------------------#
+    def ajoutMCinMCFactUnique(self,etape,MCFils,valeurs,listeAvant=()):
+    # Attention si +sieursMCFACT
+    #--------------------------------------------------------#
+    # dans le JDC
+        debug=False
+        if debug : print ('ajoutMC', etape,MCFils,valeurs,listeAvant)
+        ouChercher=etape
+        if debug : print (ouChercher)
+        for mot in listeAvant :
+           ouChercher=ouChercher.getChild(mot,restreint="oui")
+        # Attention si +sieursMCFACT
+        ouChercher=ouChercher[0]
+        if debug : print (ouChercher)
+        monMC=ouChercher.getChild(MCFils,restreint="oui")
+        if monMC == None : monMC = ouChercher.addEntite(MCFils)
+        monMC.valeur=valeurs
+        monMC.val=valeurs
+        monMC.state='changed'
+        monMC.isValid()
+        return 1
+
+    #----------------------------------------------#
+    def ajoutMCFact(self,etape,MCFils,listeAvant=()):
+    #----------------------------------------------#
+    # dans le JDC
+        ouChercher=etape
+        for mot in listeAvant :
+              ouChercher=ouChercher.getChild(mot,restreint="oui")
+        monMC=etape.getChild(ouChercher,restreint="oui")
+        if monMC== None : monMC= ouChercher.addEntite(MCFils)
+        monMC.isvalid()
+
+    #-----------------------------------------------------------------#
+    def setValeurMCSimpInEtape(self,etape,listeAvant,valeur):
+    #-----------------------------------------------------------------#
+    # pour VP
+        monObj=etape
+        for mot in listeAvant :
+              monObj=monObj.getChild(mot,restreint="oui")
+              if monObj==None : return False
+        if monObj == None : return False
+        if monObj.valeur != valeur :
+           # PNPN le setValeur fait des bugs --> pourquoi
+           #monObj.setValeur(valeur)
+           monObj.valeur=valeur
+           monObj.isValid()
+        return True
+
+    #-------------------------------------------------#
+    def getValeur(self,nomEtape,MCFils,listeAvant=()):
+    #-------------------------------------------------#
+    # dans le JDC
+
+        debug=0
+        ouChercher=None
+        for e in self.jdc.etapes:
+            if e.nom == nomEtape : ouChercher=e; break
+        if debug : print ('etape trouvee', ouChercher)
+        if ouChercher==None : return None
+        for mot in listeAvant :
+              ouChercher=ouChercher.getChild(mot,restreint="oui")
+              if debug : print (mot, ouChercher)
+              if ouChercher==None : return None
+        monMC=ouChercher.getChild(MCFils,restreint="oui")
+        if debug : print ('monMC', monMC)
+        if monMC== None : return None
+        return monMC.valeur
+
+    #-------------------------------------------------#
+    def getMCDsEtape(self,etape,MCFils,listeAvant=()):
+    #-------------------------------------------------#
+    # dans le JDC
+
+        if etape==None : return None
+        ouChercher=etape
+        debug=0
+        for mot in listeAvant :
+              ouChercher=ouChercher.getChild(mot,restreint="oui")
+              if debug : print (mot, ouChercher)
+              if ouChercher==None : return None
+        monMC=ouChercher.getChild(MCFils,restreint="oui")
+        if debug : print ('monMC', monMC)
+        return monMC
+
+    #-----------------------------------------------------------#
+    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.getChild(mot,restreint="oui")
+              #print (mot, ouChercher)
+              if ouChercher==None : return None
+        monMC=ouChercher.getChild(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.getChild(mot,restreint="oui")
+              if ouChercher==None : return
+        monMC=ouChercher.getChild(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.getChild(mot,restreint="oui")
+            # Le mot clef n est pas la
+            except : return 0
+        try :
+           monMC=ouChercher.getChild(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,nomEtape)
+        #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,etape,listeMC,valeurs):
+    #------------------------------------------------#
+    # dans le MDD
+        #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+        #definitionEtape=getattr(self.jdc.cata,nomEtape)
+        print ( 'changeIntoDefMC ',etape,listeMC,valeurs)
+        ouChercher=getattr(self.jdc.cata,etape.nom)
+
+        #if len(listeMC) > 1 :
+        #   for mc in listeMC[0:-1]:
+        #     mcfact=ouChercher.entites[mc]
+        #     ouChercher=mcfact
+        #mcAccas=ouChercher.entites[listeMC[-1]]
+
+        for mc in listeMC :
+            mcAccas=ouChercher.entites[mc]
+            ouChercher=mcAccas
+            if ouChercher == None : return 0
+
+        if hasattr(mcAccas,'into') : oldValeurs=mcAccas.into
+        else : oldValeurs=None
+
+        if oldValeurs==valeurs : return 1
+        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)
+        definitionEtape=getattr(self.jdc.cata,etape)
+        ouChercher=definitionEtape
+        for k in listeAvant :
+            ouChercher=ouChercher.entites[k]
+        MCADetruire=ouChercher.entites[nomDuMC]
+        ouChercher.ordre_mc.remove(nomDuMC)
+        print ('remove de ', 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)
+        definitionEtape=getattr(self.jdc.cata,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)
+        #print ('ajout de ', nomDuMC)
+        #traceback.print_stack()
+        # ajout CIST sauvegarde
+        if nomDuMC in self.dicoNouveauxMC : del self.dicoNouveauxMC[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)
+        definitionEtape=getattr(self.jdc.cata,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.getChild(mot,restreint="oui")
+            if ouChercher==None : return
+        MCFils=listeMC[-1]
+        monMC=ouChercher.getChild(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):
+    #-------------------------------------#
+        #if not hasattr(self.readercata.cata[0],'VERSION_CATALOGUE'): return txt
+        if not hasattr(self.readercata.cata,'VERSION_CATALOGUE'): return txt
+        ligneVersion="#VERSION_CATALOGUE:"+self.readercata.cata.VERSION_CATALOGUE+":FIN VERSION_CATALOGUE\n"
+        texte=txt+ligneVersion
+        return texte
+
+    #-------------------------------------#
+    def verifieVersionCataDuJDC(self,text):
+    #-------------------------------------#
+        memeVersion=False
+        indexDeb=text.find("#VERSION_CATALOGUE:")
+        indexFin=text.find(":FIN VERSION_CATALOGUE")
+        if indexDeb < 0 :
+           self.versionCataDuJDC="sans"
+           textJDC=text
+        else :
+           self.versionCataDuJDC=text[indexDeb+19:indexFin]
+           textJDC=text[0:indexDeb]+text[indexFin+23:-1]
+
+        self.versionCata="sans"
+        if hasattr(self.readercata.cata,'VERSION_CATALOGUE'): self.versionCata=self.readercata.cata.VERSION_CATALOGUE
+
+        if self.versionCata==self.versionCataDuJDC : memeVersion=True
+        return memeVersion,textJDC
+
+    #-------------------------------#
+    def traduitCatalogue(self,texte):
+    #-------------------------------#
+        nomTraducteur="traduit"+self.readercata.code+self.versionCataDuJDC+"To"+self.versionCata
+        sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../Traducteur")))
+        try :
+            traducteur=__import__(nomTraducteur)
+            monTraducteur=traducteur.MonTraducteur(texte)
+            nouveauTexte=monTraducteur.traduit()
+            return nouveauTexte
+        except :
+            return texte
+
+
+# Methodes a resorber
+# il faut mettre a jour les catalogues avec
+# TEXTE_NEW_JDC
+#
+
+    #---------------------------#
+    def _new_CF(self):
+    #---------------------------#
+        texte="CONDUITE_FORCEE();"
+        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):
+    #---------------------------#
+        texte="MAILLAGES();REMESHING();"
+        return texte
+
+
+    #---------------------------#
+    def _newJDCCND(self):
+    #---------------------------#
+      extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)')
+
+      #if self.salome == 0 :
+      QMessageBox.information( self,
+                      tr("Fichier Med"),
+                      tr("Veuillez selectionner un fichier Med"))
+      QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
+                        caption='Fichier Med',
+                        filter=extensions)
+      QSfichier=QSfichier[0]
+      self.fichierMED=QSfichier
+      from acquiertGroupes import getGroupes
+      erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
+      if erreur != "" : print ("a traiter")
+      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("
+             texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\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"
+          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
+
+
+if __name__ == "__main__":
+   print ('a faire')