Salome HOME
sauvedu1501
authorpascale.noyret <pascale.noyret@edf.fr>
Mon, 15 Jan 2018 10:00:10 +0000 (11:00 +0100)
committerpascale.noyret <pascale.noyret@edf.fr>
Mon, 15 Jan 2018 10:00:10 +0000 (11:00 +0100)
26 files changed:
Editeur/session.py
Ihm/I_MACRO_ETAPE.py
InterfaceQT4/browser.py
InterfaceQT4/configuration.py
InterfaceQT4/editor.py
InterfaceQT4/editorSsIhm.py [new file with mode: 0755]
InterfaceQT4/eficas_go.py
InterfaceQT4/monChoixCommande.py
InterfaceQT4/monGroupeOptionnel.py
InterfaceQT4/monLayoutBouton.py
InterfaceQT4/monWidgetCommande.py
InterfaceQT4/monWidgetNiveauFact.py
InterfaceQT4/monWidgetOptionnel.py
InterfaceQT4/qtEficas.py
InterfaceQT4/qtEficasSsIhm.py
InterfaceQT4/readercata.py
InterfaceQT4/ssIhm.py [deleted file]
InterfaceQT4/viewManager.py
InterfaceQT4/viewManagerSsIhm.py [new file with mode: 0644]
Tests/testelem/testaz76.py
Tests/testelem/testitem1.py
Tests/testelem/testjdc1.py
Tests/testelem/testjdc3.py
Tests/testelem/testjdc4.py
UiQT5/desWidgetCB.ui
UiQT5/desWidgetFact.ui

index 7295e8c1f9f17bee16c85cac4e59bb8f46769352..ebbf40a90af40519782c008a60fb6631cbecadb9 100644 (file)
@@ -258,6 +258,10 @@ def createparser():
     parser.add_option(u"-c","--cata", action="store", type="string",dest="cata",
                   help=tr("version de catalogue a utiliser"))
 
+    parser.add_option(u"-v","--version_cata", action="store", type="string",dest="version_cata",
+                  help=tr("version de catalogue a utiliser"))
+
+
     parser.add_option(u"-k","--kode", action="store", type="string",dest="code",
                   help=tr("nom du code a utiliser"))
 
index 9fd299344b36aebad3f02d6ae8d81125bacf7d91..c3491aa89ca79c3479e0017efa4e7e0b69c37b0e 100644 (file)
@@ -117,10 +117,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
        self.text_converted=0
        self.text_error=""
        if self.nom != "INCLUDE_MATERIAU":
-          if self.parent.appli.ihm == "QT" :
-              format=self.parent.appli.appliEficas.format_fichier
-          else :
-              format=self.jdc.appli.format_fichier.get()
+          format=self.parent.appli.appliEficas.format_fichier
           #on force a python pour Carmel
           if format=="CARMEL3D" : format="python"
           if format in convert.plugins :
index 7d40880b78cee118bb3268d9cfe9e591c373464f..82e75086b3a43121c751110a8145f4ab3265a26f 100644 (file)
@@ -500,8 +500,8 @@ class JDCNode(QTreeWidgetItem,GereRegles):
           return self.treeParent.appendChild(name,pos=index,plier=plier)
 
     def verifiePosition(self,name,pos,aLaRacine=False):
-        if name not in self.editor.Classement_Commandes_Ds_Arbre : return True
-        indexName=self.editor.Classement_Commandes_Ds_Arbre.index(name)
+        if name not in self.editor.readercata.Classement_Commandes_Ds_Arbre : return True
+        indexName=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(name)
 
         etapes=self.item.getJdc().etapes
         if etapes == [] : return True
@@ -512,16 +512,16 @@ class JDCNode(QTreeWidgetItem,GereRegles):
         if pos=="after" : indexOu = indexOu+1
         for e in etapes[:indexOu] :
             nom=e.nom
-            if nom not in self.editor.Classement_Commandes_Ds_Arbre : continue
-            indexEtape=self.editor.Classement_Commandes_Ds_Arbre.index(nom)
+            if nom not in self.editor.readercata.Classement_Commandes_Ds_Arbre : continue
+            indexEtape=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(nom)
             if indexEtape > indexName :
                comment=tr('le mot clef ')+name+tr(' doit etre insere avant ')+nom
                QMessageBox.information( None,tr('insertion impossible'),comment, )
                return False
         for e in etapes[indexOu:] :
             nom=e.nom
-            if nom not in self.editor.Classement_Commandes_Ds_Arbre : continue
-            indexEtape=self.editor.Classement_Commandes_Ds_Arbre.index(nom)
+            if nom not in self.editor.readercata.Classement_Commandes_Ds_Arbre : continue
+            indexEtape=self.editor.readercata.Classement_Commandes_Ds_Arbre.index(nom)
             if indexEtape < indexName :
                comment=tr('le mot clef ')+name+tr(' doit etre insere apres ')+nom
                QMessageBox.information( None,tr('insertion impossible'),comment, )
index 791fe6cd2a2defa5ef4b0c7851b6a09b733ac1e2..7e43cb905b6b3bc527b377ae1cfa989f88bc84e7 100644 (file)
@@ -82,8 +82,8 @@ class configBase(object):
       #Particularite des schemas MAP
       if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
 
-      if self.appli: self.parent=appli.top
-      else:         self.parent=None
+      #if self.appli: self.parent=appli.top
+      #else:        self.parent=None
 
       if not os.path.isdir(self.savedir) :
         if sys.platform[0:5]=="linux" :
@@ -122,7 +122,7 @@ class configBase(object):
       self.boutonDsMenuBar=False
       self.ficIcones=None
       self.repIcones=None
-      self.differencieSiDefaut=True
+      self.differencieSiDefaut=False
 
 
  
index e1e816e468bab490027cf6e78ec64f9dc7ca8d5e..ee7195e88cb67a59ba4356b019df198d371d8c08 100755 (executable)
@@ -27,46 +27,49 @@ except : pass
 import types,sys,os, re
 import  subprocess
 import traceback
-
 import six
-from six.moves import range
+
+
 from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter, QLabel
-from PyQt5.QtGui import QPalette
-from PyQt5.QtCore import QProcess, QFileInfo, QTimer, Qt, QDir, QSize
-import time
-import pdb
-from datetime import date
-from Extensions.i18n import tr
+from PyQt5.QtGui     import QPalette
+from PyQt5.QtCore    import QProcess, QFileInfo, QTimer, Qt, QDir, QSize
 
 import traceback
 
 # Modules Eficas
-
 import convert, generator
+from Extensions.i18n import tr
+
 from Editeur        import session
 from Editeur        import comploader
 from Editeur        import Objecttreeitem
-from desBaseWidget  import Ui_baseWidget
+from InterfaceQT4   import browser
+from InterfaceQT4   import readercata
+
+from desBaseWidget    import Ui_baseWidget
 from InterfaceQT4.monViewTexte   import ViewText
 from monWidgetCreeParam import MonWidgetCreeParam 
-from . import browser
-from . import readercata
 
 DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
 debug = False
 
     
+from InterfaceQT4.editorSsIhm    import JDCEditorSsIhm
 
 
-class JDCEditor(Ui_baseWidget,QWidget):
+class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
 # ----------------------------------------- #
     """
        Editeur de jdc
     """
 
-    #def __init__ (self,appli,fichier = None, jdc = None, QWParent=None, units = None, include=0 , vm=None):
-    def __init__ (self,appli,fichier = None, jdc = None, QWParent=None, units = None, include=0 ):
-    #--------------------------------------------------------------------------------------------#
+# ----------------------------------------
+# Methodes faisant appel a ssIhm
+# ----------------------------------------
+
+    def __init__ (self,appli,fichier = None, jdc=None, QWParent=None, units = None, include=0):
+    #------------------------------------------------------------------------------------------
+
 
         QWidget.__init__(self,None)
         self.setupUi(self)
@@ -77,356 +80,53 @@ class JDCEditor(Ui_baseWidget,QWidget):
         self.dejaDansPlieTout=False
         self.afficheCommandesPliees = True
         self.listeDesListesOuvertes=set()
+        self.afficheListesPliees=True
+        if appli!=None and hasattr(appli,"statusBar"): self.sb = appli.statusBar()
+        else : self.sb = None
+        self.QWParent=QWParent
 
-        self.appliEficas = appli
-        self.appli       = appli  #---- attendu par IHM
-        #self.vm          = vm
-        self.fichier     = fichier
-        self.jdc         = jdc
-        self.first      = True
-        self.QWParent    = QWParent
-        self.couleur     = Qt.black
-        self.nodeEnCours=None
-         
-        if appli != None :
-           self.salome =  self.appliEficas.salome
-        else :
-           self.salome=0
-           print ("dans JDC pas d appli ????????")
+        JDCEditorSsIhm. __init__ (self,appli,fichier, jdc,units,include)
 
-        # ces attributs sont mis a jour par definitCode appelee par newEditor
-        self.code   = self.appliEficas.maConfiguration.code
-        self.maConfiguration   = self.appliEficas.maConfiguration
-        self.initSplitterSizes()
+        # Particularites IHM : met la fenetre a jour
 
-        #self.afficheListesPliees=False
-        self.afficheListesPliees=True
+        self.initSplitterSizes()
         if self.code == "ASTER" or self.code == "monCode" : self.afficheListesPliees =True
         if self.code == 'PSEN_N1' : self.afficheListesPliees = False
 
-        self.closeAutreCommande=self.appliEficas.maConfiguration.closeAutreCommande
-        self.closeFrameRechercheCommande = self.appliEficas.maConfiguration.closeFrameRechercheCommande
-        self.closeArbre=self.appliEficas.maConfiguration.closeArbre
-        self.affiche=self.appliEficas.maConfiguration.affiche
-        self.afficheOptionnelVide=self.appliEficas.maConfiguration.afficheOptionnelVide
-        self.nombreDeBoutonParLigne = self.appliEficas.maConfiguration.nombreDeBoutonParLigne
-        self.dicoImages = self.appliEficas.maConfiguration.dicoImages
-        self.simpleClic = self.appliEficas.maConfiguration.simpleClic
-        self.boutonDsMenuBar = self.appliEficas.maConfiguration.boutonDsMenuBar
-
-        #if self.code in ['MAP','CARMELCND','PSEN'] : self.afficheCommandesPliees=False
-        if self.code in ['MAP','CARMELCND'] : self.afficheCommandesPliees=False
-        if self.code in ['MAP',]:
-           self.widgetTree.close()
-           self.widgetTree=None
-        if self.closeArbre: self.fermeArbre()
-
-        self.version_code = session.d_env.cata
-
+        #self.affiche=self.appliEficas.maConfiguration.affiche
 
-        if not hasattr ( self.appliEficas, 'readercata') or  self.appliEficas.multi==True:
-           self.readercata  = readercata.READERCATA( self, self.appliEficas )
-           self.appliEficas.readercata=self.readercata
-           self.appliEficas.code=self.code
-           if self.boutonDsMenuBar : self.appliEficas.remplitIconesCommandes()
-        else :
-           self.readercata=self.appliEficas.readercata
+        if self.code in ['MAP','CARMELCND','PSEN'] : self.afficheCommandesPliees=False
+        #if self.code in ['MAP','CARMELCND'] : self.afficheCommandesPliees=False
+        if self.code in ['MAP',]: self.fermeArbre()
+        #   self.widgetTree.close()
+        #   self.widgetTree=None
 
-        if self.readercata.fic_cata == None : return    #Sortie Salome
-        self.titre=self.readercata.titre
-        self.Ordre_Des_Commandes=self.readercata.Ordre_Des_Commandes
-        self.Classement_Commandes_Ds_Arbre=self.readercata.Classement_Commandes_Ds_Arbre
+        if self.maConfiguration.closeArbre: self.fermeArbre()
+        if self.maConfiguration.boutonDsMenuBar : self.appliEficas.remplitIconesCommandes()
 
+        self.version_code = session.d_env.cata
+     
         self.format =  self.appliEficas.format_fichier
 
-        self.dict_reels={}
-        self.liste_simp_reel=[]
-        self.ihm="QT"
-        self.dicoNouveauxMC={}
-        self.dicoNouveauxFact={}
-
-        nameConf='configuration_'+self.code
-        configuration=__import__(nameConf)
-        self.maConfiguration = self.appliEficas.maConfiguration
-
-        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.sb = None
-        if hasattr(self.appliEficas,"statusBar"):
-           self.sb = self.appliEficas.statusBar()
-
-        self.fileInfo       = None
-        self.lastModified   = 0
-
-        self.modified   = False
-        self.isReadOnly = False
         self.node_selected = []
         self.deplier = True
         self.message=''
         if self.code in ['Adao','ADAO','MAP'] : self.afficheApresInsert=True
-        else  self.afficheApresInsert=False
-        if self.code in ['TELEMAC',] : self.enteteQTree='premier'
-        else : self.enteteQTree='complet'
+        else                                  : self.afficheApresInsert=False
+        if self.code in ['TELEMAC',]          : self.enteteQTree='premier'
+        else                                  : self.enteteQTree='complet'
         if self.code in ['Adao','ADAO','TELEMAC'] : self.affichePlie=True
-        else : self.affichePlie=False
+        else                                      : self.affichePlie=False
 
         self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
 
-        #------- construction du jdc --------------
-
-        jdc_item = None
-
-        self.nouveau=0
-        if self.fichier is not None:        #  fichier jdc fourni
-            self.fileInfo = QFileInfo(self.fichier)
-            self.fileInfo.setCaching(0)
-            if jdc==None :
-               print ('attention chgt try en if')
-               try :
-               #if 1 :
-                   self.jdc = self.readFile(self.fichier)
-                   if self.salome : self.appliEficas.addJdcInSalome( self.fichier)
-               except :
-                   print ("mauvaise lecture")
-            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
-        #import cProfile, pstats, StringIO
-       #pr = cProfile.Profile()
-        #pr.enable()
-
-        if self.jdc:
-            self.jdc.appli = self # a resorber
-            self.jdc.editor = self 
-            self.jdc.lang    = self.appli.langue
-            self.jdc.aReafficher=False
-            txt_exception  = None
-            if not jdc:
-                self.jdc.analyse()
-                txt_exception = self.jdc.cr.getMessException()
-            if txt_exception:
-                self.jdc = None
-                QApplication.restoreOverrideCursor()
-                self.afficheInfos(tr("Erreur fatale au chargement de %s",str(fichier)),Qt.red)
-                if (self.appliEficas.ssIhm == False) : QMessageBox.critical( self, tr("Erreur fatale au chargement d'un fichier"), txt_exception)
-            else:
-                comploader.chargerComposants("QT")
-                jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
-                if (not self.jdc.isValid()) and (not self.nouveau) and (self.appliEficas.ssIhm == False):
-                    self.viewJdcRapport()
-        #pr.disable()
-        #s = StringIO.StringIO()
-        #sortby = 'cumulative'
-        #ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
-        #ps.print_stats()
-        #print (s.getValue())
-
-        if jdc_item and self.appliEficas.ssIhm==False :
-            self.tree = browser.JDCTree( jdc_item,  self )
+        if self.jdc_item and self.appliEficas.ssIhm==False :
+            self.tree = browser.JDCTree( self.jdc_item,  self )
         self.appliEficas.construitMenu()
 
-        
-        #############
         self.adjustSize()
 
 
-    #-------------------#  Pour execution avec output et error dans le bash
-    def runPSEN(self):
-    #-------------------#
-    
-      #if self.modified or self.fichier==None  : self.saveFile()
-      self.saveFile()
-        
-      #lancement avec le .bat
-      path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','PSEN_Eficas','PSEN'))
-      WrapperFilePath = os.path.join(path1, 'PSSEWrapper.py') 
-      import subprocess
-      p = subprocess.Popen(['python',WrapperFilePath])
-      (out,err)=p.communicate()        
-      print (out)
-      print (err)
-
-    #-------------------#  Pour execution avec output et error dans le bash
-    def runPSEN_N1(self):
-    #-------------------#
-      
-
-      self.saveFile()
-      path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
-      sys.path.append(path1)
-
-      if not(self.jdc.isValid()):
-         QMessageBox.information( self, tr( "Unvalid JDC"),tr("incorrect keywords will be ignored"))
-      if 'dicoImbrique' in generator.plugins:
-         self.generator=generator.plugins['dicoImbrique']()
-         jdc_formate=self.generator.gener(self.jdc)
-         dico=self.generator.Dico 
-         
-         ###to delete
-         #fileDico =  r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
-         fileDico =  os.path.join(path1, 'dicoN1.py') #r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
-         f = open( str(fileDico), 'w')
-         f.write("Dico =" + str(dico) )
-         f.close()
-         ###
-         
-      
-      print ('in runPSEN_N1', dico)
-      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)
-
-
-      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]
-
-         ###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
-
-   
-    #--------------------------------#
-    def ajoutCommentaire(self):
-    #--------------------------------#
-        if self.tree.selectedItems()==[] :
-          QMessageBox.warning( self, tr("Pas de noeud selectionne"),tr("Selectionnez un Noeud \nLe commentaire sera place apres le noeud selectionne"))
-          return 
-        noeudAvantCommentaire=self.tree.selectedItems()[0]
-        if noeudAvantCommentaire ==self.tree.racine : 
-            self.tree.racine.appendChild("COMMENTAIRE",pos=0)
-            return
-        noeudAvantCommentaire.addComment(True)
-        
-
-
-    #--------------------------------#
-    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 == "TELEMAC" : texte=self._newTELEMAC()
-        if self.code == "PSEN"    : texte = self._newPSEN()
-        if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
-
-        if hasattr(self.readercata.cata[0],'TEXTE_NEW_JDC') : texte=self.readercata.cata[0].TEXTE_NEW_JDC
-
-        #if self.code == "CF" : texte = self._new_CF()
-        #   texte=self.newTexteCND
-       
-        jdc=self.readercata.cata[0].JdC( procedure =texte,
-                                         appli=self,
-                                         cata=self.readercata.cata,
-                                         cata_ord_dico=self.readercata.cata_ordonne_dico,
-                                         rep_mat=self.maConfiguration.rep_mat
-                                        )
-        jdc.lang    = self.appli.langue
-        if units is not None:
-           jdc.recorded_units=units
-           jdc.old_recorded_units=units
-        ## PNPN est ce que la ligne suivante est bien utile ?
-        if texte == "" :jdc.analyse()
-        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="",
-                               appli=self,
-                               cata=self.readercata.cata,
-                               cata_ord_dico=self.readercata.cata_ordonne_dico,
-                               rep_mat=self.maConfiguration.rep_mat,
-                              )
-        jaux.analyse()
-
-        J=JdC_aux( procedure="",
-                   appli=self,
-                   cata=self.readercata.cata,
-                   cata_ord_dico=self.readercata.cata_ordonne_dico,
-                   jdc_pere=jaux,
-                   rep_mat=self.maConfiguration.rep_mat,
-                   )
-        J.analyse()
-        if units is not None:
-           J.recorded_units=units
-           J.old_recorded_units=units
-        return J
-
-
     #-------------------------------#
     def readFile(self, fn):
     #--------------------------------#
@@ -434,105 +134,69 @@ class JDCEditor(Ui_baseWidget,QWidget):
         Public slot to read the text from a file.
         @param fn filename to read from (string or QString)
         """
-        fn = six.text_type(fn)
 
-        # ------------------------------------------------------------------------------------
-        #                         charge le JDC
-        # ------------------------------------------------------------------------------------
-
-        jdcName=os.path.basename(fn)
-        # Il faut convertir le contenu du fichier en fonction du format
-        if self.appliEficas.format_fichier_in in convert.plugins:
-             # Le convertisseur existe on l'utilise
-             #appli = self
-             p=convert.plugins[self.appliEficas.format_fichier_in]()
-
-             p.readfile(fn)
-
-             if p.text=="" : self.nouveau=1
-             pareil,texteNew=self.verifieChecksum(p.text)
-             #if texteNew == ""
-             if pareil == False and (self.appliEficas.ssIhm == False) :
-                QMessageBox.warning( self, tr("fichier modifie"),tr("Attention! fichier change hors EFICAS"))
-             p.text=texteNew
-             memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
-             if memeVersion == 0 : texteNew=self.traduitCatalogue(texteNew)
-             p.text=texteNew
-
-             #import cProfile, pstats, StringIO
-            #pr = cProfile.Profile()
-             #pr.enable()
-
-             text=p.convert('exec',self.appliEficas)
-
-             if not p.cr.estvide():
-                self.afficheInfos("Erreur a la conversion",Qt.red)
-        else :
-            self.afficheInfos("Type de fichier non reconnu",Qt.red)
-            if self.appliEficas.ssIhm == False:
-                    QMessageBox.critical( self, tr("Type de fichier non reconnu"),
-                    tr("EFICAS ne sait pas ouvrir le type de fichier %s" ,self.appliEficas.format_fichier_in))
-            return None
-
-        CONTEXT.unsetCurrentStep()
-        jdc=self.readercata.cata[0].JdC(procedure=text,
-                                    appli=self,
-                                    cata=self.readercata.cata,
-                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
-                                    nom=jdcName,
-                                    rep_mat=self.maConfiguration.rep_mat
-                                   )
-        # ----------------------------------------------------
-        #      charge le JDC fin
-        # ----------------------------------------------------
-        self.modified = False
+        jdc=JDCEditorSsIhm.readFile(self, fn)
 
+        # Particularites IHM : met le titre de la fenetre a jour
 #        qApp.restoreOverrideCursor()
-        if self.fileInfo!= None :
-           self.lastModified = self.fileInfo.lastModified()
-        else :
-           self.lastModified = 1
+        if self.fileInfo!= None : self.lastModified = self.fileInfo.lastModified()
         nouveauTitre=self.titre+"              "+os.path.basename(self.fichier)
         self.appliEficas.setWindowTitle(nouveauTitre)
 
         return jdc
 
-
-    #-----------------------#
-    def getSource(self,file):
-    #-----------------------#
-
-        # Il faut convertir le contenu du fichier en fonction du format
-        if self.format in convert.plugins :
-            # Le convertisseur existe on l'utilise
-            p=convert.plugins[self.format]()
-            p.readfile(file)
-            text=p.convert('execnoparseur')
-            if not p.cr.estvide():
-                self.afficheInfos("Erreur a la conversion",Qt.red)
-            return text
-        else:
-            # Il n'existe pas c'est une erreur
-            self.afficheInfos("Type de fichier non reconnu",Qt.red)
-            QMessageBox.critical( self, tr("Type de fichier non reconnu"),tr("EFICAS ne sait pas ouvrir ce type de fichier"))
-            return None
+# ---------------------------------------------
+# Methodes Inchangees
+# ---------------------------------------------
+#   _newJDC
+#   _newJDCInclude
+#   __generateTempFilename
+#   getSource
+#   generDico
+#   viewJdcSource
+#   viewJdcPy
+#   viewJdcRapport
+#   getFileName
+#   initModif
+#   writeFile
+#   getTextJDC
+#   verifieChecksum
+#   getChecksum
+#   getDico
+#   chercheGroupes
+#   chercheDico
+#   saveFileLegerAs
+
+# ---------------------------------------------
+# Methodes Surchargees 
+# ---------------------------------------------
 
     #-----------------------------------------------------------------------#
     def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
     #--------------------------------------------------------------------#
         w = ViewText( self.QWParent,self ,caption,txt,largeur,hauteur)
         w.show()
-    #
 
-    #----------------------------------------------#
-    def __generateTempFilename(self, prefix, suffix):
-    #----------------------------------------------#
-        import tempfile
-        (fd, filename) = tempfile.mkstemp(prefix=prefix, suffix=suffix)
-        os.close(fd)
-        return filename
-    #
+    #--------------------------------#
+    def informe(self,titre,txt,critique=True):
+    #--------------------------------#
+       if  critique :
+           self.affiche_infos(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 
+        noeudAvantCommentaire=self.tree.selectedItems()[0]
+        if noeudAvantCommentaire ==self.tree.racine : 
+            self.tree.racine.appendChild("COMMENTAIRE",pos=0)
+            return
+        noeudAvantCommentaire.addComment(True)
 
 
     #----------------------------------------------#
@@ -566,57 +230,13 @@ class JDCEditor(Ui_baseWidget,QWidget):
         a=self.monExe.readAllStandardOutput()
         self.w.view.append(str(a.data()))
 
-    def readFromStdErrQT4(self):
-        a=self.monExe.readAllStandardError()
-        self.w.view.append(QString.fromUtf8(a.data(),len(a))) ;
-
-    def readFromStdOutQT4(self) :
-        a=self.monExe.readAllStandardOutput()
-        self.w.view.append(QString.fromUtf8(a.data(),len(a))) ;
         
-    #-----------------------#
-    def generDico(self):
-    #-----------------------#
-       if 'dico' in generator.plugins:
-         self.generator=generator.plugins['dico']()
-         jdc_formate=self.generator.gener(self.jdc)
-         dico=self.generator.Dico
-         return dico
-
     #-----------------------#
     def gestionParam(self):
     #-----------------------#
         w = MonWidgetCreeParam( self)
         w.show()
 
-    #-----------------------#
-    def viewJdcSource(self):
-    #-----------------------#
-        if self.fichier == None : return
-        f=open(self.fichier,'r')
-        texteSource=f.read()
-        f.close()
-        self._viewText(texteSource, "JDC_SOURCE")
-
-    #-----------------------#
-    def viewJdcPy(self):
-    #-----------------------#
-        strSource = str( self.getTextJDC(self.format) )
-        self._viewText(strSource, "JDC_RESULTAT")
-
-    #-----------------------#
-    def viewJdcRapport(self):
-    #-----------------------#
-        strRapport = six.text_type( self.jdc.report() )
-        # on ajoute les regles
-        
-        self._viewText(strRapport, "JDC_RAPPORT")
-
-    #-----------------------#
-    def viewJdcRegles(self):
-    #-----------------------#
-        if self.tree :self.tree.appellebuildLBRegles()
-
 
     #----------------#
     def closeIt(self):
@@ -624,13 +244,13 @@ class JDCEditor(Ui_baseWidget,QWidget):
         """
         Public method called by the viewmanager to finally get rid of us.
         """
-        if self.jdc:
-            self.jdc.supprime()
+        if self.jdc: self.jdc.supprime()
         self.close()
 
     #----------------------------------------------#
     def afficheInfos(self,message,couleur=Qt.black):
     #----------------------------------------------#
+        if couleur=='red' : couleur = Qt.red
         if self.sb:
            mapalette=self.sb.palette()
            mapalette.setColor( QPalette.WindowText, couleur )
@@ -655,15 +275,6 @@ class JDCEditor(Ui_baseWidget,QWidget):
     #----------------------#
         self.labelCommentaire.setText("")
 
-    #-------------------#
-    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 chercheNoeudSelectionne(self,copie=1):
     #---------------------------------------#
@@ -916,11 +527,6 @@ class JDCEditor(Ui_baseWidget,QWidget):
       nouveau.affichePanneau()
 
 
-    #---------------------#
-    def getFileName(self):
-    #---------------------#
-      return self.fichier
-
     #---------------------------#
     def getFileVariable(self) :
     #---------------------------#
@@ -935,86 +541,6 @@ class JDCEditor(Ui_baseWidget,QWidget):
                    tr('Wrapper Files (*.xml);;''All Files (*)'))
      return  fichier
 
-    #--------------------------------------------------#
-    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 = six.text_type(fn)
-       
-        if txt == None :
-            txt = self.getTextJDC(self.format,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:
-            if (self.appliEficas.ssIhm == False):
-                QMessageBox.critical(self, tr('Sauvegarde du Fichier'),
-                tr('Le fichier')+str(fn) + tr('n a pas pu etre sauvegarde : ') + str(why))
-            else :
-                print (why)
-            return 0
-
-    #-----------------------------------------------------------#
-    def getTextJDC(self,format,pourRun=0,formatLigne="beautifie"):
-    #-----------------------------------------------------------#
-      if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
-      if format in generator.plugins:
-         
-         # Le generateur existe on l'utilise
-         self.generator=generator.plugins[format]()
-         try :
-            jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
-            if pourRun : jdc_formate=self.generator.textePourRun
-            if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
-         except ValueError as e:
-            QMessageBox.critical(self, tr("Erreur a la generation"),str(e))
-            return
-
-         if not self.generator.cr.estvide():
-            self.afficheInfos(tr("Erreur a la generation"),Qt.red)
-            QMessageBox.critical( self, tr("Erreur a la generation"),tr("EFICAS ne sait pas convertir ce JDC"))
-            return ""
-         else:
-            return jdc_formate
-      else:
-         # Il n'existe pas c'est une erreur
-         self.afficheInfos(tr("Format %s non reconnu" , self.format),Qt.red)
-         QMessageBox.critical( self, "Format  non reconnu" ,tr("EFICAS ne sait pas convertir le JDC selon le format "+ self.format))
-         return ""
-
-    #----------------------#
-    def getDico(self):
-    #---------------------#
-      if 'dicoImbrique' in generator.plugins:
-         self.generator=generator.plugins['dicoImbrique']()
-         jdc_formate=self.generator.gener(self.jdc)
-         dico=self.generator.Dico 
-         return dico
-      else : 
-         self.afficheInfos(tr("Format %s non reconnu" , self.format),Qt.red)
-         QMessageBox.critical( self, "Format  non reconnu" ,tr("EFICAS ne sait pas convertir le JDC selon le format "+ self.format))
-         return ""
-
-
     #------------#
     def run(self):
     #------------#
@@ -1028,6 +554,11 @@ class JDCEditor(Ui_baseWidget,QWidget):
       fonction="saveRun"+self.code
       if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
 
+
+# ---------------------------------------------
+# Methodes Non Crees dans ssIHM 
+# ---------------------------------------------
+
     #---------------#
     def runMAP(self):
     #---------------#
@@ -1219,25 +750,6 @@ class JDCEditor(Ui_baseWidget,QWidget):
         self.saveFile()
 
 
-    #-----------------------------------------#
-    def chercheGroupes(self):
-    #-----------------------------------------#
-        listeMA,listeNO=self.getTextJDC("GroupMA")
-        return listeMA,listeNO
-
-    #-----------------------------------------#
-    def chercheDico(self):
-    #-----------------------------------------#
-        dicoCourant={}
-        format =  self.appliEficas.format_fichier
-        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 handleAjoutGroup(self,listeGroup):
@@ -1252,13 +764,6 @@ class JDCEditor(Ui_baseWidget,QWidget):
         #else :
            pass
 
-    #-----------------------------------------------------------------#
-    def saveFileLegerAs(self, fileName = None) :
-    #-----------------------------------------------------------------#
-        if fileName != None :
-           self.fichier = fileName
-           return self.saveFileLeger()
-        return self.saveFileLeger()
 
     #-----------------------------------------------------------------#
     def saveFileLeger(self, path = None, saveas= 0,formatLigne="beautifie"):
@@ -1776,142 +1281,20 @@ class JDCEditor(Ui_baseWidget,QWidget):
             return texte
 
 
-    #------------------------------#
-    def verifieChecksum(self,text):
-    #------------------------------#
-        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
-        #if self.code=='PSEN'
-        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 _new_CF(self):
-    #---------------------------#
-        texte="CONDUITE_FORCEE();"
-        return texte
-
-
-    #---------------------------#
-    def _newTELEMAC(self):
-    #---------------------------#
-        #texte="INITIALIZATION();BOUNDARY_CONDITIONS();GENERAL_PARAMETERS();PHYSICAL_PARAMETERS();NUMERICAL_PARAMETERS();"
-        texte="COMPUTATION_ENVIRONMENT();HYDRO();GENERAL_PARAMETERS();NUMERICAL_PARAMETERS()"
-        #texte="TRACERS();"
-        return texte
-
-    #---------------------------#
-    def _newPSEN(self):
-    #---------------------------#
-        texte="DIRECTORY() ; PSSE_PARAMETERS() ; SIMULATION() ; sansnom=DISTRIBUTION() ; sansnom=DISTRIBUTION() ; CORRELATION() ;"
-        #texte=""
-        return texte
-
-    #---------------------------#
-    def _newPSEN_N1(self):
-    #---------------------------#
-        texte="CASE_SELECTION();N_PROCESSING_OPTIONS();CONTINGENCY_OPTIONS();CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
-        #texte="CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
-        return texte
-
-    #---------------------------#
-
-    #---------------------------#
-    def _newZCRACKS(self):
-    #---------------------------#
-        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
-
-
-    #---------------------------#
-    #def  boutonFileSelected(self):
-    #---------------------------#
-
-    #  QSfichier=self.openfile.selectedFiles()[0]
-    #  self.fichierMED=str(QSfichier)
-    #  from acquiertGroupes import getGroupes
-    #  erreur,self.listeGroupes,self.nomMaillage=getGroupes(self.fichierMED)
-    #  if erreur != "" : print ("a traiter")
-
-    #-----------------------------
-    #def boutonSalomePressed(self):
-    #----------------------------
-    #  Msg,self.listeGroupes=self.appliEficas.ChercheGrpMailleInSalome()
-    #  self.fichierMED="A_partir_de_SMESH"
-    #  self.nomMaillage="A_partir_de_SMESH"
-    #  self.openfile.close()
-
 
     #-----------------------------------------
     def initSplitterSizes(self, nbWidget=3):
     #-----------------------------------------
        #print ("je passe ds initSplitterSizes", nbWidget)
 
-       if   self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes3=[1,1550,150]
-       elif self.code in [ 'MAP']            : self.splitterSizes3=[700,300]
+       if   self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes3=[1,1550,150]
+       #elif self.code in [ 'MAP']            : self.splitterSizes3=[700,300]
        else                                  : self.splitterSizes3=[150,1000,300]
 
-       if   self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes2=[5,1500]
+       if   self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes2=[5,1500]
        else                                  : self.splitterSizes2=[300,1000]
 
 
-
     #-----------------------------------------
     def restoreSplitterSizes(self,nbWidget=3):
     #----------------------------------------
@@ -1997,5 +1380,95 @@ class JDCEditor(Ui_baseWidget,QWidget):
           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)
+
+    #-------------------#  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)
+       
+    #-------------------#  Pour execution avec output et error dans le bash
+    def process_N1(self):
+    #-------------------#
+
+      path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
+      sys.path.append(path1)
+
+
+      if 'dicoImbrique' in generator.plugins:
+         self.generator=generator.plugins['dicoImbrique']()
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.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]
+
+         ###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 __name__ == "__main__":
     print ('in main')
diff --git a/InterfaceQT4/editorSsIhm.py b/InterfaceQT4/editorSsIhm.py
new file mode 100755 (executable)
index 0000000..b02a36d
--- /dev/null
@@ -0,0 +1,992 @@
+# -*- 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 six
+from six.moves import range
+
+import traceback
+
+# Modules Eficas
+
+import convert, generator
+from Editeur        import session
+from Editeur        import comploader
+from Editeur        import Objecttreeitem
+from InterfaceQT4   import readercata
+
+DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
+debug = False
+
+
+
+class JDCEditorSsIhm :
+# ------------------- #
+    """
+       Editeur de jdc
+    """
+
+# ---------------------------------------------
+# Methodes Communes ou appelees depuis avec Ihm
+# ---------------------------------------------
+
+    def __init__ (self,appli,fichier = None, jdc = None,  units = None, include=0 ):
+    #------------------------------------------------------------------------------#
+    # paticularisee avec Ihm
+
+        if debug : print ('dans le init de JDCEditorSsIhm')
+        self.appliEficas = appli
+        self.appli = appli
+        self.fichier     = fichier
+        self.jdc         = jdc
+        self.first      = True
+        self.jdc_item    = None
+        self.dicoNouveauxMC={}
+        self.dicoNouveauxFact={}
+        self.dict_reels={}
+        self.liste_simp_reel=[]
+
+         
+        if appli != 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
+
+        self.version_code = session.d_env.cata
+
+
+        if not hasattr ( self.appliEficas, 'readercata') or  self.appliEficas.multi==True:
+           self.readercata  = readercata.READERCATA( self, self.appliEficas )
+           self.appliEficas.readercata=self.readercata
+           self.appliEficas.code=self.code
+        else :
+           self.readercata=self.appliEficas.readercata
+        if self.readercata.fic_cata == None : return    #Sortie Salome
+        self.titre=self.readercata.titre
+
+        self.format =  self.appliEficas.format_fichier
+
+        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.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")
+               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.appli = self # a resorber
+            self.jdc.editor = self 
+            self.jdc.lang    = self.appli.langue
+            self.jdc.aReafficher=False
+            txt_exception  = None
+            if not jdc:
+                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 = six.text_type(fn)
+        jdcName=os.path.basename(fn)
+
+        # Il faut convertir le contenu du fichier en fonction du format
+        if self.appliEficas.format_fichier_in in convert.plugins:
+             # Le convertisseur existe on l'utilise
+
+             p=convert.plugins[self.appliEficas.format_fichier_in]()
+             p.readfile(fn)
+
+             if p.text=="" : self.nouveau=1
+             print ('PNPN --> CIST a faire')
+
+             pareil,texteNew=self.verifieChecksum(p.text)
+             if  not pareil :
+                self.informe(tr("fichier modifie"),tr("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.format_fichier_in)
+            return None
+
+        CONTEXT.unsetCurrentStep()
+        jdc=self.readercata.cata[0].JdC(procedure=text,
+                                    appli=self,
+                                    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 == "TELEMAC" : texte=self._newTELEMAC()
+        if self.code == "PSEN"    : texte = self._newPSEN()
+        if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
+
+        if hasattr(self.readercata.cata[0],'TEXTE_NEW_JDC') : texte=self.readercata.cata[0].TEXTE_NEW_JDC
+
+       
+        jdc=self.readercata.cata[0].JdC( procedure =texte,
+                                         appli=self,
+                                         cata=self.readercata.cata,
+                                         cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                         rep_mat=self.maConfiguration.rep_mat
+                                        )
+        jdc.lang    = self.appli.langue
+        if units is not None:
+           jdc.recorded_units=units
+           jdc.old_recorded_units=units
+        ## PNPN est ce que la ligne suivante est bien utile ?
+        if texte == "" :jdc.analyse()
+        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="",
+                               appli=self,
+                               cata=self.readercata.cata,
+                               cata_ord_dico=self.readercata.cata_ordonne_dico,
+                               rep_mat=self.maConfiguration.rep_mat,
+                              )
+        jaux.analyse()
+
+        J=JdC_aux( procedure="",
+                   appli=self,
+                   cata=self.readercata.cata,
+                   cata_ord_dico=self.readercata.cata_ordonne_dico,
+                   jdc_pere=jaux,
+                   rep_mat=self.maConfiguration.rep_mat,
+                   )
+        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.format in convert.plugins :
+            # Le convertisseur existe on l'utilise
+            p=convert.plugins[self.format]()
+            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.format_fichier_in)
+            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']()
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.generator.Dico
+         return dico
+
+    #-----------------------#
+    def viewJdcSource(self):
+    #-----------------------#
+        if self.fichier == None : return
+        f=open(self.fichier,'r')
+        texteSource=f.read()
+        f.close()
+        self._viewText(texteSource, "JDC_SOURCE")
+
+    #-----------------------#
+    def viewJdcPy(self):
+    #-----------------------#
+        strSource = str( self.getTextJDC(self.format) )
+        self._viewText(strSource, "JDC_RESULTAT")
+
+    #-----------------------#
+    def viewJdcRapport(self):
+    #-----------------------#
+        # on ajoute les regles
+        strRapport = six.text_type( self.jdc.report() )
+        self._viewText(strRapport, "JDC_RAPPORT")
+
+    #---------------------#
+    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 = six.text_type(fn)
+       
+        if txt == None :
+            txt = self.getTextJDC(self.format,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:
+            self.afficheInfos('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :'  + str(why))
+            return 0
+
+    #-----------------------------------------------------------#
+    def getTextJDC(self,format,pourRun=0,formatLigne="beautifie"):
+    #-----------------------------------------------------------#
+      if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+      if format in generator.plugins:
+         
+         # Le generateur existe on l'utilise
+         self.generator=generator.plugins[format]()
+         try :
+            jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
+            if pourRun : jdc_formate=self.generator.textePourRun
+            if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
+         except ValueError as e:
+            self.afficheInfos( "Erreur a la generation",str(e),'red')
+            return
+
+         if not self.generator.cr.estvide():
+            self.afficheInfos("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.afficheInfos("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']()
+         jdc_formate=self.generator.gener(self.jdc)
+         dico=self.generator.Dico 
+         return dico
+      else : 
+         self.afficheInfos(tr("Format %s non reconnu" , self.format),Qt.red)
+         return ""
+
+   #-----------------------------------------#
+    def chercheGroupes(self):
+    #-----------------------------------------#
+        listeMA,listeNO=self.getTextJDC("GroupMA")
+        return listeMA,listeNO
+
+    #-----------------------------------------#
+    def chercheDico(self):
+    #-----------------------------------------#
+        dicoCourant={}
+        format =  self.appliEficas.format_fichier
+        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()
+        return self.saveFileLeger()
+
+    #-----------------------------------------------------------------#
+    def saveFileLeger(self, fichier, formatLigne="beautifie"):
+    #-----------------------------------------------------------------#
+        fn = fichier
+        self.generator=generator.plugins[self.format]()
+        if hasattr(self.generator, "writeLeger"):
+            self.generator.writeLeger(fichier,self.jdc,config=self.appliEficas.maConfiguration,appli=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 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.get_child(mot,restreint="oui")
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        if monMC != None :  ouChercher.suppentite(monMC)
+        ouChercher.state='changed'
+        ouChercher.isvalid()
+
+    #-------------------------------------#
+    def ajoutMC(self,etape,MCFils,valeurs,listeAvant=()):
+    #-------------------------------------#
+    # dans le JDC
+        ouChercher=etape
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+        monMC=etape.get_child(ouChercher,restreint="oui")
+        if monMC== None : monMC= ouChercher.addentite(MCFils)
+        monMC.valeur=valeurs
+        monMC.val=valeurs
+        monMC.state='changed'
+        monMC.isvalid()
+
+    #----------------------------------------------#
+    def ajoutMCFact(self,etape,MCFils,listeAvant=()):
+    #----------------------------------------------#
+    # dans le JDC
+        print ('ajoutMCFact')
+        ouChercher=etape
+        print (ouChercher)
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+              print (mot)
+              print (ouChercher)
+        monMC=etape.get_child(ouChercher,restreint="oui")
+        if monMC== None : monMC= ouChercher.addentite(MCFils)
+        monMC.isvalid()
+
+    #-------------------------------------------------#
+    def getValeur(self,nomEtape,MCFils,listeAvant=()):
+    #-------------------------------------------------#
+    # dans le JDC
+
+        ouChercher=None
+        for e in self.jdc.etapes:
+            if e.nom == nomEtape : ouChercher=e; break
+        if debug : print ('etape trouvee', ouChercher)
+        if ouChercher==None : return None
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+              if debug : print (mot, ouChercher)
+              if ouChercher==None : return None
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        if debug : print ('monMC', monMC)
+        if monMC== None : return None
+        return monMC.valeur
+
+    #-----------------------------------------------------------#
+    def setValeur(self,nomEtape,MCFils,valeur,listeAvant=()):
+    #--------------------------------------------------------#
+    # dans le JDC
+
+        ouChercher=None
+        for e in self.jdc.etapes:
+            if e.nom == nomEtape : ouChercher=e; break
+        if ouChercher==None : return None
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+              #print (mot, ouChercher)
+              if ouChercher==None : return None
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        monMC.set_valeur(valeur)
+        monMC.isvalid()
+
+    #-----------------------------------------------------------#
+    def changeIntoMC(self,etape,MCFils,valeurs, listeAvant=()):
+    #-----------------------------------------------------------#
+    # dans le JDC
+        ouChercher=etape
+        if isinstance (etape, str):
+           ouChercher=None
+           for e in self.jdc.etapes:
+              if e.nom == etape : ouChercher=e; break
+        if ouChercher==None : return
+        for mot in listeAvant :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+              if ouChercher==None : return 
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        if monMC== None : monMC= ouChercher.addentite(MCFils)
+
+        monMC.definition.into=valeurs
+        from Noyau.N_VALIDATOR import  IntoProtocol
+        monMC.definition.intoProto = IntoProtocol("into", into=monMC.definition.into, val_min=monMC.definition.val_min, val_max=monMC.definition.val_max)
+        monMC.state='changed'
+        monMC.isvalid()
+
+    #-------------------------------------------------------------------#
+    def reCalculeValiditeMCApresChgtInto(self,nomEtape,MCFils,listeAvant=()):
+    #-------------------------------------------------------------------#
+    # dans le JDC
+        for e in self.jdc.etapes:
+            if e.nom == nomEtape : ouChercher=e; break
+        
+        for mot in listeAvant :
+            try :
+              ouChercher=ouChercher.get_child(mot,restreint="oui")
+            # Le mot clef n est pas la
+            except : return 0
+        try :
+           monMC=ouChercher.get_child(MCFils,restreint="oui")
+        # Le mot clef n est pas la
+        except : return 0
+        if monMC == None : return 0
+
+        if hasattr(monMC.definition,'into') :
+           if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
+           else : maListeDeValeur=monMC.definition.into
+        else :
+           return 0
+        
+        monMC.state='changed'
+        return 1
+
+    #-------------------------------------#
+    def changeDefautDefMC(self,nomEtape,listeMC,valeurs):
+    #-------------------------------------#
+    # dans le MDD
+
+        #if isinstance (etape, str):
+        #  for e in self.jdc.etapes:
+        #    if e.nom == etape : etape=e; break
+        #if etape == None : return
+        definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+        ouChercher=definitionEtape
+        if len(listeMC) > 1 :
+
+           for mc in listeMC[0:-1]:
+             mcfact=ouChercher.entites[mc]
+             ouChercher=mcfact
+           
+        mcAccas=ouChercher.entites[listeMC[-1]]
+        mcAccas.defaut=valeurs
+        return 1
+
+    #------------------------------------------------#
+    def changeIntoDefMC(self,nomEtape,listeMC,valeurs):
+    #------------------------------------------------#
+    # dans le MDD
+        definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+        ouChercher=definitionEtape
+
+        if len(listeMC) > 1 :
+           for mc in listeMC[0:-1]:
+             mcfact=ouChercher.entites[mc]
+             ouChercher=mcfact
+        mcAccas=ouChercher.entites[listeMC[-1]]
+
+        if hasattr(mcAccas,'into') : oldValeurs=mcAccas.into
+        else : oldValeurs=None
+        if oldValeurs==valeurs : return 0
+
+        mcAccas.into=valeurs
+        from Noyau.N_VALIDATOR import  IntoProtocol
+        mcAccas.intoProto = IntoProtocol("into", into=valeurs, val_min=mcAccas.val_min, val_max=mcAccas.val_max)
+        return 1
+
+    #-------------------------------------------------------------#
+    def deleteDefinitionMC(self,etape,listeAvant,nomDuMC):
+    #-------------------------------------------------------------#
+    # dans le MDD
+        #print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC
+        if isinstance (etape, str):
+          for e in self.jdc.etapes:
+            if e.nom == etape : etape=e; break
+        if etape == None : return
+        definitionEtape=getattr(self.jdc.cata[0],etape)
+        ouChercher=definitionEtape
+        for k in listeAvant : 
+            ouChercher=ouChercher.entites[k]
+        MCADetruire=ouChercher.entites[nomDuMC]
+        ouChercher.ordre_mc.remove(nomDuMC)
+        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)
+        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)
+        ouChercher=definitionEtape
+        for k in listeAvant : 
+            ouChercher=ouChercher.entites[k]
+        from Accas import A_SIMP
+        for mc in listeMC :
+            nomMC=mc[0]
+            typMC=mc[1]
+            argsMC=mc[2]
+            nouveauMC=A_SIMP.SIMP(typMC,**argsMC)
+            nouveauMC.nom=nomMC
+            args[nomMC]=nouveauMC
+        from Accas import A_FACT
+        nouveauFact=A_FACT.FACT(**args)
+        nouveauFact.pere=ouChercher
+        nouveauFact.nom=nomDuMC
+        from Editeur.autre_analyse_cata import traite_entite
+        traite_entite(nouveauFact,[])
+        ouChercher.entites[nomDuMC]=nouveauFact
+        ouChercher.ordre_mc.append(nomDuMC)
+        self.dicoNouveauxFact[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,listeMC,args)
+        #print self.dicoNouveauxMC
+
+    #----------------------------------------------------#
+
+    #----------------------------------------------------#
+    def changeIntoMCandSet(self,etape,listeMC,into,valeurs):
+    #----------------------------------------------------#
+    # dans le MDD et le JDC
+
+        self.changeIntoDefMC(etape,listeMC,into)
+
+        if isinstance (etape, str):
+          for e in self.jdc.etapes:
+            if e.nom == etape : etape=e; break
+        if etape == None : return
+
+        ouChercher = etape
+        for mot in listeMC[:-1] :
+            ouChercher=ouChercher.get_child(mot,restreint="oui")
+            if ouChercher==None : return 
+        MCFils=listeMC[-1]
+        monMC=ouChercher.get_child(MCFils,restreint="oui")
+        if monMC== None : monMC= etape.addentite(MCFils)
+
+        monMC.definition.into=into
+        monMC.valeur=valeurs
+        monMC.val=valeurs
+        monMC.state='changed'
+        monMC.isvalid() 
+
+    #-------------------------------------#
+    def ajoutVersionCataDsJDC(self,txt):
+    #-------------------------------------#
+        if not hasattr(self.readercata.cata[0],'VERSION_CATALOGUE'): return txt
+        ligneVersion="#VERSION_CATALOGUE:"+self.readercata.cata[0].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[0],'VERSION_CATALOGUE'): self.versionCata=self.readercata.cata[0].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 _newTELEMAC(self):
+    #---------------------------#
+        #texte="INITIALIZATION();BOUNDARY_CONDITIONS();GENERAL_PARAMETERS();PHYSICAL_PARAMETERS();NUMERICAL_PARAMETERS();"
+        texte="COMPUTATION_ENVIRONMENT();HYDRO();GENERAL_PARAMETERS();NUMERICAL_PARAMETERS()"
+        #texte="TRACERS();"
+        return texte
+
+    #---------------------------#
+    def _newPSEN(self):
+    #---------------------------#
+        texte="DIRECTORY() ; PSSE_PARAMETERS() ; SIMULATION() ; sansnom=DISTRIBUTION() ; sansnom=DISTRIBUTION() ; CORRELATION() ;"
+        #texte=""
+        return texte
+
+    #---------------------------#
+    def _newPSEN_N1(self):
+    #---------------------------#
+        texte="CASE_SELECTION();N_PROCESSING_OPTIONS();CONTINGENCY_OPTIONS();CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
+        #texte="CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
+        return texte
+
+    #---------------------------#
+    def _newZCRACKS(self):
+    #---------------------------#
+        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')
index f98ce24b9cc024653fb1b2d14e843f1d2da5ee41..178f9bd903fe74ff41fbcf78f41f5eda72fba160 100755 (executable)
@@ -38,6 +38,18 @@ 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 getEficasSsIhm(code='Adao',versionCode='V0'):
+#    from .qtEficasSsIhm import AppliSsIhm
+#    Eficas=AppliSsIhm(code=code,ssCode=None,salome=0)
+#    return Eficas
+def getEficasSsIhm(code=None,fichier=None,ssCode=None,multi=False,langue='en',versionCode=None):
+    print (versionCode)
+    from InterfaceQT4.qtEficasSsIhm import AppliSsIhm
+    Eficas=AppliSsIhm(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue,versionCode=versionCode)
+    from Editeur  import session
+    options=session.parse(['ssIhm','-k',code,'-v',versionCode])
+    return Eficas
+
 
 def lanceEficas(code=None,fichier=None,ssCode=None,multi=False,langue='en'):
     """
@@ -163,11 +175,10 @@ def lanceEficas_param(code='Adao',fichier=None,version='V0',macro='ASSIMILATION_
     parameters=getJdcParameters(texte,macro)
     return parameters
 
-def getEficasSsIhm(code='Adao',versionCode='V0'):
-    from .qtEficasSsIhm import AppliSsIhm
-    app = QApplication(sys.argv)
-    Eficas=Appli(code=code,ssCode=None,salome=0)
-    return Eficas
+#def getEficasSsIhm(code='Adao',versionCode='V0'):
+#    from .qtEficasSsIhm import AppliSsIhm
+#    Eficas=AppliSsIhm(code=code,ssCode=None,salome=0)
+#    return Eficas
 
 def getJdcParameters(jdc,macro):
     """
index 835a7a72370f4888e193baffe027751500f5706c..0f26b74d5e7210d2ce6b68ffa2b8df8626ad9601 100644 (file)
@@ -51,6 +51,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
       self.item = jdc_item
       self.node = node
       self.editor = editor
+      self.simpleClic=self.editor.maConfiguration.simpleClic
       self.jdc  = self.item.object.getJdcRoot()
       debutTitre=self.editor.titre
       self.listeWidget=[]
@@ -76,7 +77,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
       else : 
         self.RBRegle.clicked.connect(self.afficheRegle)
 
-      if self.editor.Ordre_Des_Commandes == None : self.RBOrdre.close()
+      if self.editor.readercata.Ordre_Des_Commandes == None : self.RBOrdre.close()
 
        
       #self.editor.labelCommentaire.setText("")
@@ -88,19 +89,19 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
       self.boolAlpha=0
       self.boolGroupe=0
       self.boolOrdre=0
-      if self.editor.affiche=="alpha"  : 
+      if self.editor.maConfiguration.affiche=="alpha"  : 
          self.boolAlpha==1;  
          self.RBalpha.setChecked(True);
          self.afficheAlpha()
-      elif self.editor.affiche=="groupe" : 
+      elif self.editor.maConfiguration.affiche=="groupe" : 
          self.boolGroupe==1; 
          self.RBGroupe.setChecked(True); 
          self.afficheGroupe()
-      elif self.editor.affiche=="ordre"  : 
+      elif self.editor.maConfiguration.affiche=="ordre"  : 
          self.boolOrdre==1;  
          self.RBOrdre.setChecked(True);  
          self.afficheOrdre()
-      if self.editor.closeFrameRechercheCommande == True : self.frameAffichage.close()
+      if self.editor.maConfiguration.closeFrameRechercheCommande == True : self.frameAffichage.close()
 
       if self.editor.widgetTree != None : self.editor.restoreSplitterSizes(2) 
       else: self.editor.restoreSplitterSizes(3)
@@ -171,7 +172,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
       return listeACreer
 
   def ajouteRadioButtons(self):
-      if self.editor.nombreDeBoutonParLigne != 0 :
+      if self.editor.maConfiguration.nombreDeBoutonParLigne != 0 :
          self.ajoutePushButtons()
          return
       #print 'ds ajouteRadioButtons'
@@ -195,11 +196,11 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
            rbcmd=(QRadioButton(tr(cmd)))
            self.buttonGroup.addButton(rbcmd)
            self.commandesLayout.addWidget(rbcmd)
-           #if self.editor.simpleClic :  rbcmd.mouseReleaseEvent=self.insereNoeudApresClick
+           #if self.simpleClic :  rbcmd.mouseReleaseEvent=self.insereNoeudApresClick
            #else : rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
            #self.buttonGroup.buttonClicked.connect(self.rbClique) 
-           if not(self.editor.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
-         if self.editor.simpleClic :  
+           if not(self.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+         if self.simpleClic :  
             self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere) 
          else :
             self.buttonGroup.buttonClicked.connect(self.rbClique) 
@@ -223,8 +224,8 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
               rbcmd=(QRadioButton(tr(cmd)))
               self.buttonGroup.addButton(rbcmd)
               self.commandesLayout.addWidget(rbcmd)
-              if not(self.editor.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
-           if self.editor.simpleClic :  
+              if not(self.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+           if self.simpleClic :  
              self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere) 
            else :
              self.buttonGroup.buttonClicked.connect(self.rbClique) 
@@ -235,8 +236,8 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
       elif  self.boolOrdre==1 :
          listeFiltre=self.creeListeCommande(filtre)
          liste=[]
-         if self.editor.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
-         else : Ordre_Des_Commandes=self.editor.Ordre_Des_Commandes
+         if self.editor.readercata.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
+         else : Ordre_Des_Commandes=self.editor.readercata.Ordre_Des_Commandes
          for cmd in Ordre_Des_Commandes :
             if cmd in listeFiltre :
                  liste.append(cmd)
@@ -245,8 +246,8 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
            rbcmd=(QRadioButton(tr(cmd)))
            self.buttonGroup.addButton(rbcmd)
            self.commandesLayout.addWidget(rbcmd)
-           if not(self.editor.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
-         if self.editor.simpleClic :  
+           if not(self.simpleClic ):  rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+         if self.simpleClic :  
             self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere) 
          else :
             self.buttonGroup.buttonClicked.connect(self.rbClique) 
@@ -281,14 +282,14 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
          liste=self.creeListeCommande(None)
          listeFiltre=self.creeListeCommande(None)
          liste=[]
-         if self.editor.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
-         else : Ordre_Des_Commandes=self.editor.Ordre_Des_Commandes
+         if self.editor.readercata.Ordre_Des_Commandes == None : Ordre_Des_Commandes=listeFiltre
+         else : Ordre_Des_Commandes=self.editor.readercata.Ordre_Des_Commandes
          for cmd in Ordre_Des_Commandes :
             if cmd in listeFiltre :
                  liste.append(cmd)
       for cmd in liste :
            col=col+1
-           if col == self.editor.nombreDeBoutonParLigne :
+           if col == self.editor.maConfiguration.nombreDeBoutonParLigne :
               col=0
               ligne=ligne+1
            self.dicoCmd[tr(cmd)]=cmd
@@ -301,8 +302,9 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
 "border-width : 30 px;\n"
 "border-color : beige;\n"
 "text-align : center")
-           if cmd in self.editor.dicoImages :
-              fichier=self.editor.dicoImages[cmd]
+           print ('self.editor.maConfiguration.dicoImages', self.editor.maConfiguration.dicoImages)
+           if cmd in self.editor.maConfiguration.dicoImages :
+              fichier=self.editor.maConfiguration.dicoImages[cmd]
               icon = QIcon()
               icon.addPixmap(QPixmap(fichier), QIcon.Normal, QIcon.Off)
               rbcmd.setIcon(icon)
index 7510add9a261eddc6103e0e68da5e457bb9b6625..69ae1653e6c4e74f396c590433ea41c27e431d96 100644 (file)
 
 from __future__ import absolute_import
 from PyQt5.QtWidgets import QCheckBox, QWidget, QLabel, QPushButton
-from PyQt5.QtCore import Qt, QRect
+from PyQt5.QtCore    import Qt, QRect
+from PyQt5.QtGui     import QPalette
 
-from Extensions.i18n import tr
+from Extensions.i18n    import tr
 from desGroupeOptionnel import Ui_groupeOptionnel
-from desPBOptionnelMT import Ui_customPB
+from desPBOptionnelMT   import Ui_customPB
 
     
 # Import des panels
 
 class monRBButtonCustom(QCheckBox):
 
-   def __init__(self,texte,monOptionnel,parent=None):
+   def __init__(self,texte,monOptionnel,parent=None,couleur=None):
       QCheckBox.__init__(self,tr(texte),parent)
       self.mousePressed=True
       self.monOptionnel=monOptionnel
       self.setToolTip(tr("clicker: affichage aide, double-click: ajout"))
+      if couleur != None :
+         mapalette=self.palette()
+         mapalette.setColor( QPalette.WindowText, couleur )
+         self.setPalette( mapalette );
+         self.setText(tr(texte))
+
 
    def mouseDoubleClickEvent(self, event):
       #print "dans mouseDoubleClickEvent", self
@@ -77,9 +84,13 @@ class monRBButtonCustom(QCheckBox):
   
 class monPBButtonCustom(QWidget,Ui_customPB):
 
-   def __init__(self,texte,monOptionnel,parent=None):
+   def __init__(self,texte,monOptionnel,parent=None,couleur=None):
       QWidget.__init__(self)
       self.setupUi(self)
+      if couleur != None :
+         mapalette=self.monPb.palette()
+         mapalette.setColor( QPalette.ButtonText, Qt.red )
+         self.monPb.setPalette( mapalette );
       self.monPb.setText(texte)
       self.monPb.clicked.connect(self.ajoutMC)
 
@@ -118,7 +129,7 @@ class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel):
      if liste != [] : 
         self.affiche(liste,liste_rouge)
         self.afficheTitre()
-     elif self.parentQt.parentQt.afficheOptionnelVide != False : 
+     elif self.parentQt.parentQt.maConfiguration.afficheOptionnelVide != False : 
         self.afficheTitre()
         self.MCOptionnelLayout.insertWidget(0,QLabel(tr('Pas de MC Optionnel')))
      else :
@@ -145,16 +156,17 @@ class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel):
      self.dicoCb={}
      liste.reverse()
      for mot in liste :
-         if mot in liste_rouge : print ('je dois afficher en rouge' , mot)
-         if self.parentQt.parentQt.simpleClic == False :
-            cb = monRBButtonCustom(mot,self)
+         #if mot in liste_rouge : print ('je dois afficher en rouge' , mot)
+         couleur=None
+         if mot in liste_rouge : couleur=Qt.red 
+         print (mot,couleur)
+         if self.parentQt.parentQt.maConfiguration.simpleClic == False :
+            cb = monRBButtonCustom(mot,self,couleur=couleur)
             cb.clicked.connect(cb.ajoutAideMC)
          else :
-            cb = monPBButtonCustom(mot,self)
+            cb = monPBButtonCustom(mot,self,couleur=couleur)
 
          self.MCOptionnelLayout.insertWidget(0,cb)
          self.dicoCb[cb]=mot
      self.scrollAreaCommandesOptionnelles.horizontalScrollBar().setSliderPosition(0)
 
-      
-
index ce0b19feb4b6632c23137141ad65876b907cf6e6..a1c11b7b83669b738ea92942d592db5b5a926a11 100644 (file)
@@ -42,8 +42,8 @@ class MonLayoutBouton :
       for nomEtape in self.appliEficas.readercata.cata_ordonne_dico:
         toolButton = QToolButton(self.appliEficas.toolBarCommande)
         icon = QIcon()
-        if nomEtape in self.appliEficas.readercata.dicoIcones:
-             fichier = self.appliEficas.readercata.dicoIcones[nomEtape]
+        if nomEtape in self.appliEficas.maConfiguration.dicoIcones:
+             fichier = self.appliEficas.maConfiguration.dicoIcones[nomEtape]
              icon.addPixmap(QPixmap(fichier), QIcon.Normal, QIcon.Off)
              toolButton.setIcon(icon)
         else :
index b0a962ce4bcb554d3462e5d76baf2344d35fead6..17aff195d22685529d1ea9c531c6935b8c9ac99f 100644 (file)
@@ -80,7 +80,7 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe):
       self.labelNomCommande.setText(tr(self.obj.nom))
 
 
-      if self.editor.closeAutreCommande == True  : self.closeAutreCommande()
+      if self.editor.maConfiguration.closeAutreCommande == True  : self.closeAutreCommande()
       else :
         try :
            self.bCatalogue.clicked.connect(self.afficheCatalogue)
@@ -91,7 +91,7 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe):
        
       if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange)
    
-      if self.editor.code in ['Adao','ADAO'] and self.editor.closeFrameRechercheCommande==True  : 
+      if self.editor.code in ['Adao','ADAO'] and self.editor.maConfiguration.closeFrameRechercheCommande==True  : 
                       self.frameAffichage.close()
 
       if self.editor.code in ['CARMELCND',] : self.closeAutreCommande()
index 1da4530271a09028940cc5f1e59cdf532a5ab677..a044a96ae7a1674de5fee4bd5058fcb4e0e6c587 100644 (file)
@@ -82,7 +82,7 @@ class MonWidgetNiveauFact(Ui_WidgetNiveauFact,Groupe):
 #      self.labelNomCommande.setText(tr(self.obj.nom))
 #
 #
-#      if self.editor.closeAutreCommande == True  : self.closeAutreCommande()
+#      if self.editor.maConfiguration.closeAutreCommande == True  : self.closeAutreCommande()
 #      else :
 #        try :
 #           self.bCatalogue.clicked.connect(self.afficheCatalogue)
index 6500fb8a6d18b56aafd7770697bbedcf92d6ef23..1c3d91d810eec453f020648f92ef8b329395c6ad 100644 (file)
@@ -68,7 +68,7 @@ class  MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel):
             del self.dicoMCWidgetOptionnel[k]
 
   def titre(self,MC):
-     if self.parentCommande.node.editor.code in ['Adao','ADAO'] and self.parentCommande.node.editor.closeFrameRechercheCommande==True :
+     if self.parentCommande.node.editor.code in ['Adao','ADAO'] and self.parentCommande.node.editor.maConfiguration.closeFrameRechercheCommande==True :
         self.frameLabelCommande.close()
         return
      labeltext,fonte,couleur = self.parentCommande.node.item.getLabelText()
index 539f53975c8d37ff0078ed7e63e08b718378c396..74f9584c27ca160d1812c386f3c4144c05a9d77a 100755 (executable)
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
 # -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2017   EDF R&D
 #
@@ -32,76 +33,47 @@ from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QBoxLayout,
 from PyQt5.QtGui import QIcon
 from PyQt5.QtCore import Qt, QSize
 
-from Extensions.i18n import tr
-from Extensions.eficas_exception import EficasException
-from Extensions import param2
 
-
-from myMain import Ui_Eficas
-from .viewManager import MyTabview
-from .getVersion import getEficasVersion
 from Editeur import session
+from myMain import Ui_Eficas
+from InterfaceQT4.viewManager import MyViewManager
+from InterfaceQT4.qtEficasSsIhm import AppliSsIhm
 
+from Extensions.i18n import tr
+from Extensions.eficas_exception import EficasException
+from Extensions import param2
 
 
-class Appli(Ui_Eficas,QMainWindow):
+class Appli(AppliSsIhm,Ui_Eficas,QMainWindow):
     """
     Class implementing the main user interface.
     """
-    def __init__(self,code=None,salome=1,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=False):
+    def __init__(self,code=None,salome=1,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=False,versionCode=None):
         """
         Constructor
         """
+        if ssIhm == True : 
+           print ('mauvaise utilisation de la classe Appli. Utiliser AppliSsIm SVP')
+           exit()
+
+        AppliSsIhm.__init__(self,code,salome,parent,ssCode,multi,langue,ssIhm=True,versionCode=None)
         QMainWindow.__init__(self,parent)
         Ui_Eficas.__init__(self)
 
-        
-
-        version=getEficasVersion()
-        self.VERSION_EFICAS="Eficas QT5 Salome " + version
-        self.salome=salome
-        self.parentMainWindow=parent
-        self.ihm="QT"
-        self.ssIhm=ssIhm
-        self.top = self    #(pour maConfiguration)
-        self.QWParent=None #(Pour lancement sans IHM)
-        self.code=code
-        self.indice=0
-        self.first=1
-        self.dict_reels={}
-        self.recent =  []
-        self.ficRecents={}
-        self.mesScripts={}
-        self.listeAEnlever=[]
-        self.ListePathCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
-        self.listeCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
-        self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
-
-
-        if self.salome:
-          import Accas
-          try :
-            import eficasSalome
-            Accas.SalomeEntry = eficasSalome.SalomeEntry
-          except : 
-            print ('eficas hors salome')
-
+        self.ssIhm=False
         self.multi=multi
-        self.demande=multi # specifique PSEN
-
-        if langue=='fr': self.langue=langue
-        else           : self.langue="ang"
+        self.demande=multi # voir PSEN
 
         if self.multi == False :
              self.definitCode(code,ssCode)
              if code==None: return
         else :
-             OOOOOOOOOOO
+             print ('a programmer')
 
         self.suiteTelemac=False
         if hasattr (self, 'maConfiguration') :
            if self.maConfiguration.force_langue :
-              from .monChoixLangue import MonChoixLangue
+              from InterfaceQt4.monChoixLangue import MonChoixLangue
               widgetLangue = MonChoixLangue(self)
               ret=widgetLangue.exec_()
            self.suiteTelemac=self.maConfiguration.suiteTelemac
@@ -111,8 +83,8 @@ class Appli(Ui_Eficas,QMainWindow):
         from Extensions import localisation
         app=QApplication
         if hasattr (self, 'maConfiguration') : localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
-
         self.setupUi(self)
+
         #if parent != None : self.parentCentralWidget = parent.centralWidget()
         #else              : self.parentCentralWidget = None
 
@@ -120,8 +92,9 @@ class Appli(Ui_Eficas,QMainWindow):
            if  hasattr (self, 'maConfiguration') and hasattr(self.maConfiguration,'taille') : self.taille=self.maConfiguration.taille
            else : self.taille=1700
 
-           if self.code in ['MAP',] : self.resize(1440,self.height())
-           else : self.resize(self.taille,self.height())
+           #if self.code in ['MAP',] : self.resize(1440,self.height())
+           #else : self.resize(self.taille,self.height())
+           self.resize(self.taille,self.height())
 
 
         icon = QIcon(self.repIcon+"/parametres.png")
@@ -156,7 +129,7 @@ class Appli(Ui_Eficas,QMainWindow):
 
         eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
-        self.viewmanager = MyTabview(self)
+        self.viewmanager = MyViewManager(self)
         self.recentMenu=QMenu(tr('&Recents'))
         #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
 
@@ -189,31 +162,13 @@ class Appli(Ui_Eficas,QMainWindow):
         self.ssCode=ssCode
         if self.code==None :
            self.cleanPath()
-           from .monChoixCode import MonChoixCode
+           from InterfaceQt4.monChoixCode import MonChoixCode
            widgetChoix = MonChoixCode(self)
            #ret=widgetChoix.exec_()
            widgetChoix.show()
-        import sys
         if self.code == None:return # pour le cancel de la fenetre choix code
-        name='prefs_'+self.code
-        prefsCode=__import__(name)
-
-        self.repIni=prefsCode.repIni
-        if ssCode != None :
-           self.format_fichier= ssCode  #par defaut
-           prefsCode.NAME_SCHEME=ssCode
-        else :
-           self.format_fichier="python" #par defaut
-
-        nameConf='configuration_'+self.code
-        configuration=__import__(nameConf)
-        self.maConfiguration = configuration.make_config(self,prefsCode.repIni)
-
-        if hasattr (self,'maConfiguration') and self.maConfiguration.translatorFichier : 
-           from Extensions import localisation
-           localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
+        AppliSsIhm.definitCode(self,code,ssCode)
 
-        print ('self.closeAutreCommande',self.maConfiguration.closeAutreCommande)
         #PN --> pb d exception qui font planter salome
         # plus supporte en python 3
         #app=QApplication
index 9d23af1e805a2988f1947f12db2ff97c82c02946..4e5ec872e17d341eee81cefdc4979801999a62b0 100755 (executable)
@@ -27,15 +27,12 @@ except : pass
 import os, sys
 import six
 
-from Extensions.i18n import tr
 from Extensions.eficas_exception import EficasException
 from Extensions import param2
-from InterfaceQT4.viewManagerSsIhm import MyTabviewSsIhm
-
 
 from InterfaceQT4.getVersion import getEficasVersion
-
-from editorSsIhm import JDCEditorSsIhm
+from InterfaceQT4.viewManagerSsIhm import MyViewManagerSsIhm
+#from editorSsIhm import JDCEditorSsIhm
 
 
 class AppliSsIhm:
@@ -48,7 +45,7 @@ class AppliSsIhm:
         """
         version=getEficasVersion()
         self.VERSION_EFICAS="Eficas QT5 Salome " + version
-        self.version_code=versionCode
+        self.versionCode=versionCode
 
         self.salome=salome
         self.ssIhm=True
@@ -75,7 +72,10 @@ class AppliSsIhm:
             print ('eficas hors salome')
 
         self.multi=multi
-        self.demande=multi # specifique PSEN
+        if self.multi : 
+              print ('pas de multi sans ihm')
+              exit()
+
 
         if langue=='fr': self.langue=langue
         else           : self.langue="ang"
@@ -85,7 +85,7 @@ class AppliSsIhm:
              if code==None: return
 
         self.suiteTelemac=False
-        self.viewmanager = MyTabviewSsIhm(self)
+        self.viewmanager=MyViewManagerSsIhm(self)
 
 
     def definitCode(self,code,ssCode) :
@@ -105,50 +105,64 @@ class AppliSsIhm:
 
         nameConf='configuration_'+self.code
         configuration=__import__(nameConf)
-        self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
-        self.CONFIGStyle = None
-        if hasattr(configuration,'make_config_style'):
-           self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
-
-
-        
-    def fileNew(self):
-        self.viewmanager.newEditor()
-
-    def fileOpen(self,fichier):
-        self.viewmanager.handleOpen(fichier)
-
-    def fileSave(self):
-        return self.viewmanager.saveCurrentEditor()
-
-    def fileSaveAs(self,fichier):
-        return self.viewmanager.saveAsCurrentEditor(fichier)
-
-    def fileClose(self):
-        self.viewmanager.handleClose()
+        self.maConfiguration = configuration.make_config(self,prefsCode.repIni)
 
-    def jdcRapport(self):
-        return self.viewmanager.jdcRapport()
+        if hasattr (self,'maConfiguration') and self.maConfiguration.translatorFichier :
+           from Extensions import localisation
+           localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
 
-    def jdcText(self):
-        return self.viewmanager.jdcText()
-
-    def jdcDico(self):
-        return self.viewmanager.jdcDico()
-
-    def jdcDicoPython(self):
-        return self.viewmanager.jdcDicoPython()
 
     def getSource(self,file):
     # appele par Editeur/session.py
-    # a garder pour les poursuites
-    # le format n est pas le meme que celui de la fonction jdcText
         import convert
         p=convert.plugins['python']()
         p.readfile(file)
         texte=p.convert('execnoparseur')
         return texte
 
+
+    def initEditor(self,fichier = None,jdc = None, units = None,include=0):
+        if self.editor != None : 
+           print ('un seul editeur par appli')
+           sys.Exit()
+        self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include)
+        
+
+    def fileNew(self):
+        self.editor=initEditor(self)
+
+    def getEditor(self):
+        return self.editor
+
+    def fileOpen(self,fichier):
+        fichierIn = os.path.abspath(six.text_type(fichier))
+        try:
+            monEditor=self.viewmanager.handleOpen(fichierIn)
+        except EficasException as exc:
+            print ('poum')
+            monEditor=None
+        return monEditor
+
+    def fileSave(self):
+        if self.editor == None : return False
+        ok, newName = editor.saveFileAs()
+        print ('ok, newName ',ok, newName)
+
+    def fileSaveAs(self,fileName):
+        if self.editor == None : return False
+        ok = editor.saveFileAs()
+        print ('ok ',ok)
+
+#,self.fileSaveAs
+#,self.fileClose
+#,self.fileExit
+#,self.jdcRapport
+#,self.jdcRegles
+#,self.jdcFichierSource
+#,self.visuJdcPy
+       
+
+
 if __name__=='__main__':
 
     # Modules Eficas
index 4ff2e49da69c98ad078b9fd674215d78740260dc..86005ee6fc60fe516b84c76b85d76dd31cd34dbb 100644 (file)
@@ -56,14 +56,16 @@ from PyQt5.QtWidgets import QMessageBox, QApplication, QDialog
 class READERCATA(object):
 
    def __init__(self,QWParent, appliEficas):
+      print ('----------------------')
+      print ('dans init de readercata')
+      print ('----------------------')
       self.QWParent=QWParent
       self.appliEficas=self.QWParent.appliEficas
       self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS
-      self.code=self.QWParent.code
+      self.code=self.appliEficas.code
       self.ssCode=self.appliEficas.ssCode
       self.appliEficas.format_fichier='python'
-      self.version_code=self.QWParent.version_code
-      self.version_cata=None
+      self.versionCode=self.appliEficas.versionCode
       self.fic_cata=None
       self.openCata()
       self.traiteIcones()
@@ -108,10 +110,10 @@ class READERCATA(object):
           return
 
 
-      if self.version_code is not None:
+      if self.versionCode is not None:
           # La version a ete fixee
           for cata in liste_cata_possibles:
-             if self.version_code == cata.identifier:
+             if self.versionCode == cata.identifier:
                 self.fic_cata = cata.cata_file_path
                 self.appliEficas.format_fichier = cata.file_format
                 self.appliEficas.format_fichier_in = cata.file_format_in
@@ -131,7 +133,7 @@ class READERCATA(object):
                  sys.exit(1)
           elif len(cata_choice_list) == 1:
               self.fic_cata = cata_choice_list[0].cata_file_path
-              self.version_code = cata_choice_list[0].identifier
+              self.versionCode = cata_choice_list[0].identifier
               self.appliEficas.format_fichier = cata_choice_list[0].file_format
               self.appliEficas.format_fichier_in = cata_choice_list[0].file_format_in
           else:
@@ -141,7 +143,7 @@ class READERCATA(object):
 
       if self.fic_cata == None :
           if self.appliEficas.salome == 0 :
-             print(("Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)))
+             print(("Pas de catalogue pour code %s, version %s" %(self.code,self.versionCode)))
              sys.exit(1)
           else :
              self.appliEficas.close()
@@ -182,7 +184,7 @@ class READERCATA(object):
       self.cata=(self.cata,)
 
       self.titre=self.VERSION_EFICAS+" "+tr( " avec le catalogue ") + os.path.basename(self.fic_cata)
-      if self.appliEficas.top:
+      if self.appliEficas.ssIhm == False :
         self.appliEficas.setWindowTitle(self.titre)
       self.appliEficas.titre=self.titre
       self.QWParent.titre=self.titre
@@ -259,12 +261,11 @@ class READERCATA(object):
       if ret == QDialog.Accepted:
           print (widgetChoix.CBChoixCata.currentIndex())
           cata = cata_choice_list[widgetChoix.CBChoixCata.currentIndex()]
-          self.version_cata = cata.identifier
           self.fic_cata = cata.cata_file_path
-          self.version_code = self.version_cata
+          self.versionCode = cata.identifier
           self.appliEficas.format_fichier = cata.file_format
           self.appliEficas.format_fichier_in = cata.file_format_in
-          lab+=self.version_cata
+          lab+=self.versionCata
           self.appliEficas.setWindowTitle(lab)
           #qApp.mainWidget().setCaption(lab)
           widgetChoix.close()
@@ -277,10 +278,11 @@ class READERCATA(object):
       try:
         ficIcones=self.appliEficas.maConfiguration.ficIcones 
         fichierIcones = __import__(ficIcones, globals(), locals(), [], -1)
-        self.dicoIcones=fichierIcones.dicoDesIcones.dicoIcones
+        self.appliEficas.maConfiguration.dicoIcones=fichierIcones.dicoDesIcones.dicoIcones
+        self.appliEficas.maConfiguration.dicoImages=fichierIcones.dicoDesIcones.dicoIcones
       except:
         print ("Pas de fichier associe contenant des liens sur les icones ")
-        self.dicoIcones={}
+        self.appliEficas.maConfiguration.dicoIcones={}
       
 
 
diff --git a/InterfaceQT4/ssIhm.py b/InterfaceQT4/ssIhm.py
deleted file mode 100644 (file)
index 7d1bc45..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- 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
-#
-#    permet de lancer  EFICAS en n affichant rien
-try :
-   from builtins import object
-except : pass
-
-class appliEficasSSIhm(object):
-   def __init__ (self,code):
-       self.VERSION_EFICAS="Sans Ihm"
-       self.code=code
-       self.ssCode=None
-       self.salome=None
-       self.top=None
-       self.indice=0
-       self.dict_reels={}
-       self.listeAEnlever=[]
-
-
-       name='prefs_'+self.code
-       try :
-         prefsCode=__import__(name)
-       except :
-         name='prefs_'+self.code.upper()
-         self.code=self.code.upper()
-         prefsCode=__import__(name)
-       
-
-       self.repIni=prefsCode.repIni
-       self.format_fichier="python" #par defaut
-
-       nameConf='configuration_'+self.code
-       configuration=__import__(nameConf)
-       self.maConfiguration = configuration.make_config(self,prefsCode.repIni)
-        
-class QWParentSSIhm(object):
-   def __init__(self,code,version_code):
-        self.ihm="QT"
-        self.code=code
-        self.version_code=version_code
-        self.format_fichier="python" #par defaut
-
index 415501afa7ae400e9e2c98f3179df3cb6f155724..0cc09614c684e473ebf4b17feb9696f0a9980807 100644 (file)
@@ -31,7 +31,7 @@ from  PyQt5.QtWidgets  import QFileDialog, QMessageBox
 from  PyQt5.QtCore     import QFileInfo
 
 DictExtensions= {"MAP" : ".map"}
-class MyTabview(object):
+class MyViewManager(object):
 
    def __init__(self,appliEficas):
        self.appliEficas=appliEficas
diff --git a/InterfaceQT4/viewManagerSsIhm.py b/InterfaceQT4/viewManagerSsIhm.py
new file mode 100644 (file)
index 0000000..44e625e
--- /dev/null
@@ -0,0 +1,332 @@
+# -*- 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
+#
+
+from __future__ import absolute_import
+try :
+   from builtins import str
+   from builtins import object
+except : pass
+
+import os
+from Extensions.i18n import tr
+import six
+from  PyQt5.QtWidgets  import QFileDialog, QMessageBox
+from  PyQt5.QtCore     import QFileInfo
+
+# --------------------------------
+class JdcSsIhmHandler(object):
+# --------------------------------
+# retourne a l utilisateur
+
+   def __init__(self,viewManager):
+#  --------------------------------------
+       self.viewManagerSsIhm=viewManager
+
+   def viewJdcPy(self) :
+#  ---------------------
+       self.viewManagerSsIhm.handleViewJdcPy(self)
+
+   def viewJdcSource(self) :
+#  ---------------------
+       self.viewManagerSsIhm.handleViewJdcSource(self)
+
+   def getFileName(self):
+#  ---------------------
+       self.viewManagerSsIhm.getFileName(self)
+
+
+
+
+
+#--------------------------------
+class MyViewManagerSsIhm(object):
+#--------------------------------
+# Symetrique de ViewManager mais pas d heritage entre les 2
+# dans le viewManager pas de souci pour savoir qui est le jdc sur lequel on travaille
+# ici en revanche.... c est moins sur
+
+#  --------------------------------
+   def __init__(self,appliEficas):
+#  --------------------------------
+       self.appliEficas=appliEficas
+       self.tabWidgets = []
+       self.mesIndexes = {}
+       self.dictEditors={}
+       self.untitledCount = 0
+       self.doubles = {}
+
+#  ------------------------------------------------------
+   def handleOpen(self,fichier=None, units=None):
+#  ------------------------------------------------------
+       result = None
+       if fichier is None: 
+             print ('nom de fichier obligatoire')
+             return None
+
+       for handler in self.dictEditors :
+           editor=self.dictEditors[handler]
+           if self.samePath(fichier, editor.getFileName()):
+              print ('fichier deja ouvert . pas de nouvel editor')
+              return handler
+
+       monNewHandler = self.getNewEditor(fichier,units)
+       return monNewHandler
+
+#  ----------------------------------------------------------------------
+   def getNewEditor(self,fichier = None,jdc = None, units = None,include=0):
+#  ----------------------------------------------------------------------
+
+       from InterfaceQT4.editorSsIhm import JDCEditorSsIhm
+       editor = JDCEditorSsIhm(self.appliEficas,fichier,jdc, units=units,include=include)
+
+       if editor.jdc: # le fichier est bien un jdc
+          monHandler = JdcSsIhmHandler(self)
+          self.dictEditors[monHandler]=editor
+          return monHandler
+       else:
+          print ('impossible de construire le jdc') 
+          return None
+
+#  -----------------------------
+   def samePath(self,f1, f2):
+#  ------------------------------
+    """
+    compare two paths.
+    """
+    if f1 is None or f2 is None: return 0
+    if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1
+    return 0
+
+#  ---------------------------------
+   def handleViewJdcPy(self,handler):
+#  ---------------------------------
+        if not (handler in self.dictEditors) :
+           print ('editor non trouve')
+           return
+        self.dictEditors[handler].viewJdcPy()
+
+#  ---------------------------------
+   def getFileName(self,handler):
+#  ---------------------------------
+        if not (handler in self.dictEditors) :
+           print ('editor non trouve')
+           return
+        return self.dictEditors[handler].getFileName()
+
+
+#  ---------------------------------------------
+   def handleViewJdcSource(self,handler):
+#  ---------------------------------------------
+        print (handler)
+        if not (handler in self.dictEditors) :
+           print ('editor non trouve')
+           return
+        self.dictEditors[handler].viewJdcSource()
+
+
+#   def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter')):
+#       if doitSauverRecent : self.appliEficas.sauveRecents()
+#       index=self.myQtab.currentIndex()
+#       if index < 0 : return
+#       res=self.checkDirty(self.dict_editors[index],texte)
+#       if res == 2 : return 2             # l utilisateur a annule
+#       index=self.myQtab.currentIndex()
+#       idx=index
+#       while idx < len(self.dict_editors) -1 :
+#             self.dict_editors[idx]=self.dict_editors[idx+1]
+#             idx = idx + 1
+#       del self.dict_editors[len (self.dict_editors) -1]
+#       try :
+#           del self.doubles[self.dict_editors[index]]
+#       except :
+#           pass
+#       self.myQtab.removeTab(index)
+#       return res
+#       
+
+#
+#   def handleCloseAll(self,texte=tr('Quitter')):
+#       res=0
+#       self.appliEficas.sauveRecents()
+#       while len(self.dict_editors) > 0 :
+#             self.myQtab.setCurrentIndex(0)
+#             res=self.handleClose(0,texte)
+#             if res==2 : return res   # l utilsateur a annule
+#       return res
+#        
+#
+#
+#   def newEditor(self,include=0):
+#       if self.appliEficas.demande==True : 
+#           self.appliEficas.definitCode(None,None)
+#           if self.appliEficas.code == None:return
+#       maPage=self.getEditor(include=include)
+#
+
+#
+#   def handleViewJdcRegles(self):
+#       index=self.myQtab.currentIndex()
+#       if index < 0 : return
+#       self.dict_editors[index].viewJdcRegles()
+#
+#   def handleGestionParam(self):
+#       index=self.myQtab.currentIndex()
+#       if index < 0 : 
+#          QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees"))
+#          return
+#       self.dict_editors[index].gestionParam()
+#
+#   def handleViewJdcRapport(self):
+#       index=self.myQtab.currentIndex()
+#       if index < 0 : return
+#       self.dict_editors[index].viewJdcRapport()
+#
+#
+#   def saveCurrentEditor(self):
+#       index=self.myQtab.currentIndex()
+#       if index < 0 : return
+#       editor=self.dict_editors[index]
+#       if editor in self.doubles :
+#           QMessageBox.warning(
+#                     None,
+#                     tr("Fichier Duplique"),
+#                     tr("Le fichier ne sera pas sauvegarde."),)
+#           return
+#       ok, newName = editor.saveFile()
+#       if ok :
+#           fileName=os.path.basename(six.text_type(newName))
+#           self.myQtab.setTabText(index,fileName)
+#       return ok
+#
+#   def saveLegerCurrentEditor(self):
+#       index=self.myQtab.currentIndex()
+#       if index < 0 : return
+#       editor=self.dict_editors[index]
+#       ok, newName = editor.saveFileLeger()
+#       return ok
+#
+#   def sauveLigneCurrentEditor(self):
+#       index=self.myQtab.currentIndex()
+#       if index < 0 : return
+#       editor=self.dict_editors[index]
+#       if editor in self.doubles :
+#           QMessageBox.warning(
+#                     None,
+#                     tr("Fichier Duplique"),
+#                     tr("Le fichier ne sera pas sauvegarde."),)
+#           return
+#       ok, newName = editor.sauveLigneFile()
+#       if ok :
+#           fileName=os.path.basename(six.text_type(newName))
+#           self.myQtab.setTabText(index,fileName)
+#       return ok
+#
+#
+#   def saveAsCurrentEditor(self):
+#       index=self.myQtab.currentIndex()
+#       editor=self.dict_editors[index]
+#       oldName=editor.fichier
+#       ok,newName = editor.saveFileAs()
+#       if ok :
+#           fileName=os.path.basename(six.text_type(newName))
+#           self.myQtab.setTabText(index,fileName)
+#       if editor in self.doubles :
+#          if oldName != newName :
+#             del self.doubles[editor]
+#       return ok
+#
+#   def displayJDC(self,jdc,fn=None):
+#        """
+#        Public slot to display a file in an editor.
+#        @param fn name of file to be opened
+#        # insert filename into list of recently opened files
+#        """
+#        titre=None
+#        if fn != None : titre=fn.split("/")[-1]
+#        editor = self.getEditor(fichier= fn, jdc = jdc ,include=1)
+#        self.appliEficas.addToRecentList(editor.getFileName())
+#
+
+##PNPNPNPN --> a affiner
+#        if fichier is None:
+#            self.untitledCount += 1
+#            self.myQtab.addTab(win, tr("Fichier non encore nomme ", self.untitledCount))
+#            #self.myQtab.addTab(win, str(self.appliEficas.code))
+#        else:
+#            liste=fichier.split('/')
+#            txt =  liste[-1]
+#            if not QFileInfo(fichier).isWritable():
+#                txt = '%s (ro)' % txt
+#            self.myQtab.addTab(win,txt )
+#        self.myQtab.setCurrentWidget(win)
+#        self.currentEditor=win
+#        win.setFocus()
+#
+#   def getOpenStartDir(self) :
+#       #PN --> Les Preferences
+#        try :
+#            userDir=os.path.expanduser("~/Eficas_install/")
+#            return userDir
+#        except :
+#            return ""
+#
+#
+#   def checkDirty(self, editor,texte):
+#        """
+#        Private method to check dirty status and open a message window.
+#        
+#        @param editor editor window to check
+#        @return flag indicating successful reset of the dirty flag (boolean)
+#        """        
+#        res=1 
+#        if (editor.modified) and (editor in self.doubles) :
+#            msgBox = QMessageBox(None)
+#            msgBox.setWindowTitle(tr("Fichier Duplique"))
+#            msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
+#            msgBox.addButton(texte,0)
+#            msgBox.addButton(tr("&Annuler"),1)
+#            res=msgBox.exec_()
+#            if res == 0 : return 1
+#            return 2
+#        if editor.modified:
+#            fn = editor.getFileName()
+#            if fn is None: fn = tr('Noname')
+#            msgBox = QMessageBox(None)
+#            msgBox.setWindowTitle(tr("Fichier Modifie"))
+#            msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
+#            msgBox.addButton(tr("&Sauvegarder"),1)
+#            msgBox.addButton(tr("&Quitter sans sauvegarder"),0)
+#            msgBox.addButton(tr("&Annuler"),2)
+#            res=msgBox.exec_()
+#            if res == 2 : return res
+#            if res == 0:
+#                (ok, newName) = editor.saveFile()
+#                if ok:
+#                    fileName=os.path.basename(six.text_type(newName))
+#                    index=self.myQtab.currentIndex()
+#                    self.myQtab.setTabText(index,fileName)
+#                return ok
+#        return res
+#
+#   def handleAjoutGroup(self,listeGroup):
+#       index=self.myQtab.currentIndex()
+#       if index < 0 : return
+#       editor=self.dict_editors[index]
+#       editor.handleAjoutGroup(listeGroup)
index c1f33dd018e8b5c1178d680886224c42e14a300a..13dc618ac6f6bb47ddfe817f7eceee5822ef464f 100644 (file)
@@ -312,7 +312,7 @@ class TestCase(unittest.TestCase):
 
       assert j.isValid(),j.report()
 
-      text1=app.get_text_JDC(j,'python')
+      text1=app.getTextJDC(j,'python')
       file=os.path.join(prefs.INSTALLDIR,"Tests/testelem/az.comm")
       f=open(file)
       text2=f.read()
index 8ec79c914dd3b6bc6cdd225e216b9cc5d5c9f4d0..04a0458ebc89f492ce7fd11747bcc2cbeea67e72 100644 (file)
@@ -65,7 +65,7 @@ class TestCase(unittest.TestCase):
               if mc.nom == "MAILLAGE":
                  valeur,validite=mc.evalValeur("MAIL")
                  test = mc.set_valeur(valeur)
-      text1=app.get_text_JDC(j,'python')
+      text1=app.getTextJDC(j,'python')
       f=open(file)
       text2=f.read()
       f.close()
index 1390163ce71a1c33113cad9197d7a407631f188f..9702958d87f39bec0543e0ee72663b64daf4318c 100644 (file)
@@ -63,7 +63,7 @@ FIN CR validation :toto.comm
       co=j.etapes[1]
       mcs=co.addEntite("INFO")
       
-      cr=app.get_text_JDC(j,'python')
+      cr=app.getTextJDC(j,'python')
       expected="""
 DEBUT();
 
@@ -76,7 +76,7 @@ FIN();
       test,mess=co.nommeSd("MA2")
       assert test == 1
 
-      cr=app.get_text_JDC(j,'python')
+      cr=app.getTextJDC(j,'python')
       expected="""
 DEBUT();
 
@@ -368,7 +368,7 @@ FIN();
 
       assert j.isValid(),j.report()
 
-      text1=app.get_text_JDC(j,'python')
+      text1=app.getTextJDC(j,'python')
       file=os.path.join(prefs.INSTALLDIR,"Tests/testelem/az.comm")
       f=open(file)
       text2=f.read()
index 8bc3abfdd293f7920b02961d91f4f10508cd22cd..d0edff75e67cf016f162642fc313091274f38f9e 100644 (file)
@@ -52,7 +52,7 @@ class TestCase(unittest.TestCase):
         if co.nom in ("AFFE_MODELE","AFFE_MATERIAU") :
            add_mcsimp(co,"MAILLAGE",'MAIL')
 
-      text1=app.get_text_JDC(j,'python')
+      text1=app.getTextJDC(j,'python')
       f=open(file)
       text2=f.read()
       f.close()
index cf2938109b38ab300e9337629ed7e594b14dcca9..164083ee408470895c57f051ca2951eb4363674c 100644 (file)
@@ -52,7 +52,7 @@ class TestCase(unittest.TestCase):
       j=app.openJDC(file=file)
       assert j.isValid(),j.report()
 
-      text1=app.get_text_JDC(j,'python')
+      text1=app.getTextJDC(j,'python')
       f=open(file)
       text2=f.read()
       f.close()
index ba0c5a242b8c397e8a6e6be6807ad7af58c6276a..ed26a71875912a2db3594392228281afbc8de61d 100644 (file)
@@ -6,12 +6,12 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>739</width>
-    <height>63</height>
+    <width>803</width>
+    <height>41</height>
    </rect>
   </property>
   <property name="sizePolicy">
-   <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
    <item>
     <widget class="MonLabelClic" name="label">
      <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+      <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
index dbc1f738fd93bfbe2de87d499c20c5506c95f35d..3f0fc6ec453242c656faf1aa3292067330aaa7de 100644 (file)
@@ -6,10 +6,16 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>949</width>
-    <height>53</height>
+    <width>978</width>
+    <height>60</height>
    </rect>
   </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <property name="focusPolicy">
    <enum>Qt::StrongFocus</enum>
   </property>
        <property name="topMargin">
         <number>2</number>
        </property>
+       <item>
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>2</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
       </layout>
      </item>
     </layout>