]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
version du 6 mars
authorPASCALE NOYRET <pascale.noyret@edf.fr>
Wed, 6 Mar 2024 15:37:03 +0000 (16:37 +0100)
committerPASCALE NOYRET <pascale.noyret@edf.fr>
Wed, 6 Mar 2024 15:37:03 +0000 (16:37 +0100)
44 files changed:
Accas/catalog/catadesc.py
Accas/catalog/reader_cata.py
Editeur/configuration.py
Editeur/editor.py
Editeur/editor_manager.py
Editeur/eficas_appli.py
Editeur/eficas_go.py
Editeur/loggingEnvironnement.py
Editeur/old/web_eficas.py [new file with mode: 0755]
Editeur/session.py
Efi2Xsd/AccasXsd.py
InterfaceGUI/Common/traiteSaisie.py [deleted file]
InterfaceGUI/QT5/feuille.py
InterfaceGUI/QT5/monChoixCommande.py
InterfaceGUI/QT5/monFonctionPanel.py
InterfaceGUI/QT5/monWidgetCB.py
InterfaceGUI/QT5/monWidgetCBIntoSug.py
InterfaceGUI/QT5/monWidgetCBSD.py
InterfaceGUI/QT5/monWidgetCommande.py
InterfaceGUI/QT5/monWidgetPlusieursBase.py
InterfaceGUI/QT5/monWidgetPlusieursInto.py
InterfaceGUI/QT5/monWidgetPlusieursIntoOrdonne.py
InterfaceGUI/QT5/monWidgetPlusieursPlie.py
InterfaceGUI/QT5/monWidgetPlusieursTuple.py
InterfaceGUI/QT5/monWidgetRadioButton.py
InterfaceGUI/QT5/monWidgetSDCOInto.py
InterfaceGUI/QT5/monWidgetSimpBase.py
InterfaceGUI/QT5/monWidgetSimpBool.py
InterfaceGUI/QT5/monWidgetSimpComplexe.py
InterfaceGUI/QT5/monWidgetSimpSalome.py
InterfaceGUI/QT5/monWidgetSimpTuple.py
InterfaceGUI/QT5/monWidgetUniqueSDCO.py
InterfaceGUI/QT5/qt_editor.py
InterfaceGUI/QT5/qt_editor_manager.py
InterfaceGUI/QT5/qt_eficas.py
InterfaceGUI/QT5/traiteSaisie.py [new file with mode: 0644]
InterfaceGUI/Web/.web_eficas.py.swp [deleted file]
InterfaceGUI/Web/browser.py
InterfaceGUI/Web/composimp.py
InterfaceGUI/Web/web_editor.py
InterfaceGUI/Web/web_editor_manager.py [deleted file]
InterfaceGUI/Web/web_eficas.py [deleted file]
InterfaceGUI/cinqC/qt_editor.py
Web/mdm2.py

index 78b24dbf2e45e269186e150640c3cfcec5b1812f..9c3c669957e1751af0cba2fcbdad8e699a0f182d 100644 (file)
@@ -28,7 +28,7 @@ class CatalogDescription(object):
     def __init__(
         self,
         versionCode,
-        fichierCata,
+        cataFile,
         formatFichierOut="python",
         formatFichierIn="python",
         default=False,
@@ -43,8 +43,8 @@ class CatalogDescription(object):
         :type  versionCode: string
         :param versionCode: unique versionCode for the catalog
 
-        :type  fichierCata: string
-        :param fichierCata: path of the file containing the catalog itself
+        :type  cataFile: string
+        :param cataFile: path of the file containing the catalog itself
 
         :type  fileFormatOut: string
         :param fileFormatOut: format of the files generated when using this catalog
@@ -73,7 +73,7 @@ class CatalogDescription(object):
         """
 
         self.versionCode = versionCode
-        self.fichierCata = fichierCata
+        self.cataFile = cataFile
         self.formatFichierOut = formatFichierOut
         self.formatFichierIn = formatFichierIn
         self.default = default
@@ -94,7 +94,7 @@ class CatalogDescription(object):
                 code=cataTuple[0],
                 ssCode=cataTuple[1],
                 versionCode=cataTuple[0] + cataTuple[1],
-                fichierCata=cataTuple[2],
+                cataFile=cataTuple[2],
                 formatFichierOut=cataTuple[3],
                 formatFichierIn=cataTuple[4],
             )
@@ -103,7 +103,7 @@ class CatalogDescription(object):
             desc = CatalogDescription(
                 code=cataTuple[0],
                 versionCode=cataTuple[1],
-                fichierCata=cataTuple[2],
+                cataFile=cataTuple[2],
                 ssCode=cataTuple[3],
                 formatFichierOut="MAP",
                 formatFichierIn="MAP",
@@ -112,7 +112,7 @@ class CatalogDescription(object):
             desc = CatalogDescription(
                 code=cataTuple[0],
                 versionCode=cataTuple[1],
-                fichierCata=cataTuple[2],
+                cataFile=cataTuple[2],
                 formatFichierOut=cataTuple[3],
                 formatFichierIn="python",
             )
@@ -120,7 +120,7 @@ class CatalogDescription(object):
             desc = CatalogDescription(
                 code=cataTuple[0],
                 versionCode=cataTuple[1],
-                fichierCata=cataTuple[2],
+                cataFile=cataTuple[2],
                 formatFichierOut=cataTuple[3],
                 formatFichierIn=cataTuple[4],
             )
@@ -128,7 +128,7 @@ class CatalogDescription(object):
             desc = CatalogDescription(
                 code=cataTuple[0],
                 versionCode=cataTuple[1],
-                fichierCata=cataTuple[2],
+                cataFile=cataTuple[2],
                 formatFichierOut=cataTuple[3],
                 formatFichierIn=cataTuple[4],
                 defaut=cataTuple[5],
index 5a8e72d41d3b63b22af0e3b05f3fbd4d3bb14ca5..06250ce1113dfda4199e7f3d5dc9a165dbb4ebe6 100644 (file)
@@ -34,6 +34,7 @@ from Accas.catalog import uiinfo
 from Accas.extensions.eficas_translation import tr
 from Accas.extensions.eficas_exception import EficasException
 
+debug = 0
 
 # -----------------------------
 class ReaderCataCommun(object):
@@ -69,7 +70,7 @@ class ReaderCataCommun(object):
         #if ret == QDialog.Accepted:
         if ret == 1:
             cata = cataListeChoix[widgetChoix.CBChoixCata.currentIndex()]
-            self.fichierCata = cata.fichierCata
+            self.cataFile = cata.cataFile
             self.versionCode = cata.versionCode
             self.appliEficas.formatFichierOut = cata.formatFichierOut
             self.appliEficas.formatFichierIn = cata.formatFichierIn
@@ -114,7 +115,7 @@ class ReaderCataCommun(object):
             # La version a ete fixee
             for cata in listeCataPossibles:
                 if self.versionCode == cata.versionCode:
-                    self.fichierCata = cata.fichierCata
+                    self.cataFile = cata.cataFile
                     self.versionCode = cata.versionCode
                     self.appliEficas.formatFichierOut = cata.formatFichierOut
                     self.appliEficas.formatFichierIn = cata.formatFichierIn
@@ -128,17 +129,17 @@ class ReaderCataCommun(object):
                         cataChoiceList.append(cata)
 
         # le catalogue est fixe dans la ligne de commande
-        if self.appliEficas.fichierCata != None:
+        if self.appliEficas.cataFile != None:
             trouve = False
             for catalogue in listeTousLesCatas:
-                if os.path.abspath(catalogue.fichierCata) == ( os.path.abspath(self.appliEficas.fichierCata)):
+                if os.path.abspath(catalogue.cataFile) == ( os.path.abspath(self.appliEficas.cataFile)):
                     listeCataPossibles = (catalogue,)
                     trouve = True
                     break
             if not trouve:
                 # utilise par Telemac
                 catalogue = CatalogDescription.createFromTuple(
-                    ( self.code, self.code, self.appliEficas.fichierCata, "python", "python",)
+                    ( self.code, self.code, self.appliEficas.cataFile, "python", "python",)
                 )
                 listeCataPossibles = (catalogue,)
 
@@ -156,7 +157,7 @@ class ReaderCataCommun(object):
             # La version a ete fixee
             for cata in listeCataPossibles:
                 if self.versionCode == cata.versionCode:
-                    self.fichierCata = cata.fichierCata
+                    self.cataFile = cata.cataFile
                     self.appliEficas.formatFichierIn = cata.formatFichierIn
                     self.appliEficas.formatFichierOut = cata.formatFichierOut
         else:
@@ -173,7 +174,7 @@ class ReaderCataCommun(object):
                 if self.appliEficas.salome == 0: sys.exit(1)
 
             elif len(cataListeChoix) == 1:
-                self.fichierCata = cataListeChoix[0].fichierCata
+                self.cataFile = cataListeChoix[0].cataFile
                 self.versionCode = cataListeChoix[0].versionCode
                 self.appliEficas.formatFichierOut = cataListeChoix[0].formatFichierOut
                 self.appliEficas.formatFichierIn = cataListeChoix[0].formatFichierIn
@@ -185,7 +186,7 @@ class ReaderCataCommun(object):
                 self.demandeCatalogue = True
                 self.askChoixCatalogue(cataListeChoix)
 
-        if self.fichierCata == None:
+        if self.cataFile == None:
             if self.appliEficas.salome == 0:
                 print( "Pas de catalogue pour code %s, version %s" % (self.code, self.versionCode))
                 sys.exit(1)
@@ -211,7 +212,14 @@ class ReaderCata(ReaderCataCommun):
         self.appliEficas.formatFichierIn = "python"
         self.appliEficas.formatFichierOut = "python"
         self.versionCode = self.appliEficas.versionCode
-        self.fichierCata = self.appliEficas.fichierCata
+        # TODO
+        # En transitoire pour garder la versionQT5 compatbile avec la nouvelle API 
+        # Bien reflechir  pour conserver la possibilité du prefs_Code.py
+        if self.editor.cataFile != None :
+            self.cataFile = self.editor.cataFile
+        else :
+            self.cataFile = self.appliEficas.cataFile
+        if debug : print ('ReaderCata self.cataFile =', self.cataFile)
         self.openCata()
         self.traiteIcones()
         self.cataitem = None
@@ -226,10 +234,10 @@ class ReaderCata(ReaderCataCommun):
         dans le repertoire Cata
         """
         # import du catalogue
-        if self.fichierCata == None:
+        if self.cataFile == None:
             self.choisitCata()
 
-        self.cata = self.importCata(self.fichierCata)
+        self.cata = self.importCata(self.cataFile)
         if self.code == "NonConnu": self.code = self.cata.JdC.code
         modeleMetier = None
         dicoEltDif = {}
@@ -242,24 +250,24 @@ class ReaderCata(ReaderCataCommun):
                     )
                     exit()
                 try:
-                    nomCataXsd = os.path.splitext(os.path.basename(self.fichierCata))[0]
-                    fichierCataTrunc = os.path.splitext(
-                        os.path.basename(self.fichierCata)
+                    nomCataXsd = os.path.splitext(os.path.basename(self.cataFile))[0]
+                    cataFileTrunc = os.path.splitext(
+                        os.path.basename(self.cataFile)
                     )[0]
-                    nomCataXsd = fichierCataTrunc + "_driver"
+                    nomCataXsd = cataFileTrunc + "_driver"
 
-                    if os.path.dirname(self.fichierCata) == "":
+                    if os.path.dirname(self.cataFile) == "":
                         pathCata = "./raw/" + nomCataXsd + ".py"
                     else:
                         pathCata = (
-                            os.path.dirname(self.fichierCata)
+                            os.path.dirname(self.cataFile)
                             + "/raw/"
                             + nomCataXsd
                             + ".py"
                         )
 
                     self.cata.fileModeleMetier = (
-                        os.path.dirname(self.fichierCata)
+                        os.path.dirname(self.cataFile)
                         + "/raw/"
                         + nomCataXsd
                         + ".xsd"
@@ -304,7 +312,7 @@ class ReaderCata(ReaderCataCommun):
         self.cata.modeleMetier = modeleMetier
         if not self.cata:
             self.appliEficas.afficheMessage(
-                "Catalogue", "Impossible d'importer le catalogue " + self.fichierCata
+                "Catalogue", "Impossible d'importer le catalogue " + self.cataFile
             )
             self.appliEficas.close()
             if self.appliEficas.salome == 0:
@@ -348,7 +356,7 @@ class ReaderCata(ReaderCataCommun):
 
         self.titre = (
             self.versionEficas + tr(" avec le catalogue ")
-            + os.path.basename(self.fichierCata)
+            + os.path.basename(self.cataFile)
         )
         self.editor.titre = self.titre
         if hasattr(self.appliEficas, 'setWindowTitle') :
@@ -359,13 +367,16 @@ class ReaderCata(ReaderCataCommun):
         if hasattr(self.cata, "modifieCatalogueDeterministe"):
             self.cata.modifieCatalogueDeterministe(self.cata)
 
-    def importCata(self, fichierCata):
+    def importCata(self, cataFile):
         """
         Realise l'import du catalogue dont le chemin d'acces est donne par cata
         """
          
-        nomCata = os.path.splitext(os.path.basename(fichierCata))[0]
-        repCata = os.path.abspath(os.path.dirname(fichierCata))
+        if debug : print ('importCata cataFile', cataFile)
+        nomCata = os.path.splitext(os.path.basename(cataFile))[0]
+        repCata = os.path.abspath(os.path.dirname(cataFile))
+        if debug : print ('importCata nomCata', cataFile)
+        if debug : print ('importCata repCata', cataFile)
         sys.path[:0] = [repCata]
         self.appliEficas.listePathAEnlever.append(repCata)
 
@@ -385,14 +396,16 @@ class ReaderCata(ReaderCataCommun):
         # try: self.appliEficas.mesScripts[self.code] = __import__(mesScriptsNomFichier)
         # except: pass
 
-        try:
+        #try:
+        if 1 :
             #import importlib.util
             from importlib import util
-            cataSpec = util.spec_from_file_location(nomCata, fichierCata)
+            cataSpec = util.spec_from_file_location(nomCata, cataFile)
             leCata = util.module_from_spec(cataSpec)
             cataSpec.loader.exec_module(leCata)
             return leCata
-        except Exception as e:
+        #except Exception as e:
+        else :
             self.appliEficas.afficheMessage("catalog python", "unable to load catalog file")
             import traceback
             traceback.print_exc()
@@ -412,9 +425,9 @@ class ReaderCata(ReaderCataCommun):
         Retrouve l'ordre des mots-cles dans le catalogue, cad :
         Attention s appuie sur les commentaires
         """
-        nomCata = os.path.splitext(os.path.basename(self.fichierCata))[0]
-        repCata = os.path.dirname(self.fichierCata)
-        self.commandesOrdreCatalogue = analyse_ordre_impose.analyseCatalogue( self.fichierCata)
+        nomCata = os.path.splitext(os.path.basename(self.cataFile))[0]
+        repCata = os.path.dirname(self.cataFile)
+        self.commandesOrdreCatalogue = analyse_ordre_impose.analyseCatalogue( self.cataFile)
 
     def traiteIcones(self):
         if self.appliEficas.maConfiguration.ficIcones == None:
index d0a8750229660806372070b0672292b45cc37bfd..ae3830631d985da478db9ffc1f1f497f2a1fe332 100644 (file)
@@ -156,8 +156,8 @@ class BaseConfiguration(object):
 
         if self.salome : name = "prefs_salome_" + self.appliEficas.code
         else : name = "prefs_" + self.appliEficas.code
-        if self.appliEficas.fichierCata != None :
-            dirCata=os.path.dirname(self.appliEficas.fichierCata)
+        if self.appliEficas.cataFile != None :
+            dirCata=os.path.dirname(self.appliEficas.cataFile)
             sys.path.append(os.path.abspath(dirCata))
             self.appliEficas.listePathAEnlever.append(dirCata)
         try:
index 5dc397b8c6062d0c60faf787418d63ff70ab8965..c7aa39af71655ff592939ab5a02551e9bfb46f14 100755 (executable)
@@ -40,25 +40,28 @@ class Editor:
     Editeur de jdc
     """
 
-    def __init__(self, appliEficas, fichier=None, jdc=None, include=0):
-    # ----------------------------------------------------------------------------#
+
+    def __init__(self, appliEficas, cataFile = None, dataSetFile = None,  jdc=None, include=0):
+    # ----------------------------------------------------------------------------------------#
         if debug: print("dans le init de Editor")
+        if debug : print (self, appliEficas, cataFile, dataSetFile,  jdc, include)
         self.appliEficas = appliEficas
 
-        self.fichier = fichier
-        self.fichierComplet = fichier
-        if fichier != None: self.extensionFichier = os.path.splitext(fichier)[1]
+        self.dataSetFile = dataSetFile
+        self.fichierComplet = dataSetFile
+        if dataSetFile != None: self.extensionFichier = os.path.splitext(dataSetFile)[1]
         else: self.extensionFichier = None
 
         self.jdc = jdc
+        self.cataFile = cataFile
         self.first = True
         self.jdc_item = None
         self.dicoNouveauxMC = {}
         self.dicoNouveauxFact = {}
         self.dict_reels = {}
         self.liste_simp_reel = []
-        self.idEditor = uuid1().hex
-        self.appliEficas.editorManager.dictEditors[self.idEditor]=self
+        self.editorId = uuid1().hex
+        self.appliEficas.editorManager.dictEditors[self.editorId]=self
 
 
         # ces attributs sont mis a jour par definitCode appelee par newEditor
@@ -121,24 +124,24 @@ class Editor:
         # ------- construction du jdc --------------
 
         if self.readercata.cata == None: 
-           if self.fichier is not None: 
-              print ('fichier comm mais pas de cata')
+           if self.dataSetFile is not None: 
+              print ('dataSetFile comm mais pas de cata')
            return  # Sortie Salome
 
         self.nouveau = 0
-        if self.fichier is not None:  #  fichier jdc fourni
+        if self.dataSetFile is not None:  #  fichier jdc fourni
             if jdc == None:
                 # print ('PNPN : chgt try en if')
                 try:
                 #if 1 :
-                    self.jdc = self.readFile(self.fichier)
+                    self.jdc = self.readFile(self.dataSetFile)
                 except Exception as e :
                 #else :
-                    print("mauvaise lecture du fichier")
+                    print("mauvaise lecture du dataSetFile")
                     raise EficasException("str(e)")
                 if self.appliEficas.salome:
                     try:
-                        self.appliEficas.addJdcInSalome(self.fichier)
+                        self.appliEficas.addJdcInSalome(self.dataSetFile)
                     except Exception as e:
                         print("mauvais enregistrement dans Salome")
                         raise EficasException("str(e)")
@@ -185,7 +188,7 @@ class Editor:
         fn = str(fn)
         jdcName = os.path.basename(fn)
 
-        # Il faut convertir le contenu du fichier en fonction du format
+        # Il faut convertir le contenu du dataSetFile en fonction du format
         formatIn = self.appliEficas.formatFichierIn
         if self.extensionFichier == ".xml" and self.appliEficas.withXSD:
             formatIn = "xml"
@@ -374,9 +377,9 @@ class Editor:
     # --------------------------#
     def getJdcFichierSource(self):
     # --------------------------#
-        if self.fichier == None: return "fichier source non defini"
-        if os.path.isfile(self.fichier):
-            f = open(self.fichier, "r")
+        if self.dataSetFile == None: return "fichier source non defini"
+        if os.path.isfile(self.dataSetFile):
+            f = open(self.dataSetFile, "r")
             texteSource = f.read()
             f.close()
             return texteSource
@@ -404,10 +407,21 @@ class Editor:
         texteGlobal, testOK = self.jdc.verifRegles()
         return texteGlobal
 
-    # ---------------------#
-    def getFileName(self):
-    # ---------------------#
-        return self.fichier
+    # -------------------------#
+    def getDataSetFileName(self):
+    # --------------------------#
+        return self.dataSetFile
+
+    # -------------------------#
+    def getCataFileName(self):
+    # --------------------------#
+        return self.cataFile
+
+    # -------------------------#
+    def getEditorId(self):
+    # --------------------------#
+        return self.editorId
+
 
     # -------------------#
     def initModif(self):
@@ -576,7 +590,7 @@ class Editor:
     def saveFileLegerAs(self, fileName=None):
     # --------------------------------------#
         if fileName != None:
-            self.fichier = fileName
+            self.dataSetFile = fileName
             return self.saveFileLeger(fileName)
         return self.saveFileLeger()
 
@@ -600,7 +614,7 @@ class Editor:
         if fichier == None:
             self.informe("Sauvegarde", "nom de fichier obligatoire pour sauvegarde")
             return 0, None
-        self.fichier = fichier
+        self.dataSetFile = fichier
         self.myWriter = writer.plugins["UQ"]()
         ret, comm = self.myWriter.creeNomsFichiers(fichier)
         # print (ret,comm)
@@ -724,13 +738,13 @@ class Editor:
             if self.myWriter != self.XMLWriter:
                 self.XMLWriter.gener(self.jdc)
                 self.XMLWriter.writeDefault(fichier)
-                return (1, self.fichier)
+                return (1, self.dataSetFile)
         if self.jdc.isValid() and hasattr(self.myWriter, "writeDefault"):
             self.myWriter.writeDefault(fichier)
         elif self.code == "TELEMAC" and hasattr(self.myWriter, "writeDefault"):
             self.myWriter.writeDefault(fichier)
         self.modified = 0
-        return (1, self.fichier)
+        return (1, self.dataSetFile)
 
     #
 
index 04fc0bd828045a143013a51208cf6b75a9baafae..3196af560cd312d4d34f280f4cb16c1136f971e7 100644 (file)
 
 import os
 from uuid import uuid1
+from multiprocessing import Lock
 
+debug = 1
 # --------------------------
 class EditorManager(object):
 # --------------------------
     """
-    classe mere des managers d editeur pour Qt et le web
-    permettent de gerer plusieurs ouvertures de fichiers simultannees en IHM
-    utilisee sans etre derivee pour le dumpXSD ou les transformations 
+    classe mere du manager d editeur pour Qt 
+    permet de gerer plusieurs ouvertures de fichiers simultannees en Web ou TUI
+    utilisee sans etre derivee  dans ces 2 cas
     """
     # remplace par l index du viewManager 
 
@@ -36,37 +38,94 @@ class EditorManager(object):
     # --------------------------------
         self.appliEficas = appliEficas
         self.mesIndexes = {}
-        self.dictEditors = {}
         self.editors = []
         self.doubles = {}
+        self.lock = Lock()
+        self.dictEditors = {}
+    # TODO : doit on prevoir l inverse ? a t on besoin pour une session de connaitre tous ces editeurs
+    # reflechir au close
+    # TODO
 
 
-    # -----------------------------------------------------------------
-    def getEditor(self, cata = None, fichier=None, jdc=None, include=0):
-    # -----------------------------------------------------------------
+    # -----------------------------------------------------
+    def getEditor(self, fichier=None, jdc=None, include=0):
+    # ------------------------------------------------------
         """
           Retourne un nouvel editeur ou None si doublon 
         """
+        # TODO : reflechir
+        print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+        print ('getEditor dans editor : pas programme --> derive en QT, utiliser getTUIEditor ou getWebEditor')
+        print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+        return None
+
+    # ----------------------------------------------------------------------------------------
+    def getTUIEditor(self,sId = None, cataFile = None, dataSetFile=None, jdc=None, include=0):
+    # -----------------------------------------------------------------------------------------
+        """
+          Retourne un nouvel editeur ou None si doublon
+        """
+        if cataFile == None :
+            self.appliEficas.afficheMessage(sId, 'Eficas',
+                 'nom de catalogue obligatoire pour obtenir un editor')
+            return (None, 1, 'nom de catalogue obligatoire pour obtenir un editor')
+        with self.lock :
+            for editor in self.dictEditors.values():
+                if self.samePath(dataSetFile, editor.getDataSetFileName()) and self.samePath(cataFile, editor.getCataFileName()):
+                    break
+            else:
+                from editor import Editor
+                editor = WebEditor(self.appliEficas, cataFile, dataSetFile)
+
+            if editor.jdc:  # le fichier est bien un jdc
+                self.dictEditors[editor.editorId]=editor
+                self.editors.append(editor)
+                if  editor.editorId in self.appliEficas.dictEditorIdSessionId :
+                   self.appliEficas.dictEditorIdSessionId[editor.editorId].append(sId)
+                else :
+                   self.appliEficas.dictEditorIdSessionId[editor.editorId]=[sId,]
+            else:
+                return (None, 1, 'impossible d allouer l editor')
+
+    # ----------------------------------------------------------------------------------------
+    def getWebEditor(self,sId = None, cataFile = None, dataSetFile=None, jdc=None, include=0):
+    # -----------------------------------------------------------------------------------------
+        """
+          Retourne un nouvel editeur ou None si doublon
+        """
+        if cataFile == None :
+            self.appliEficas.afficheMessage(sId, 'Eficas',
+                 'nom de catalogue obligatoire pour obtenir un editor')
+            return (None, 1, 'nom de catalogue obligatoire pour obtenir un editor')
+        with self.lock :
+            for editor in self.dictEditors.values():
+                if self.samePath(dataSetFile, editor.getDataSetFileName()) and self.samePath(cataFile, editor.getCataFileName()):
+                    break
+            else:
+                from InterfaceGUI.Web.web_editor import WebEditor
+                editor = WebEditor(self.appliEficas, cataFile, dataSetFile)
+
+            if editor.jdc:  # le fichier est bien un jdc
+                self.dictEditors[editor.editorId]=editor
+                self.editors.append(editor)
+                if  editor.editorId in self.appliEficas.dictEditorIdSessionId :
+                   self.appliEficas.dictEditorIdSessionId[editor.editorId].append(sId)
+                else :
+                   self.appliEficas.dictEditorIdSessionId[editor.editorId]=[sId,]
+            else:
+                return (None, 1, 'impossible d allouer l editor')
+            return (editor, 0, '')
 
-        if fichier == None :
-            self.appliEficas.afficheMessage('Eficas', 
-                 'nom de fichier obligatoire pour obtenir un editor')
-            return None
-        for indexEditor in self.dictEditors:
-            editor = self.dictEditors[indexEditor]
-            if self.samePath(fichier, editor.getFileName()):
-               self.appliEficas.afficheMessage('Eficas sans Ihm', 'Fichier deja ouvert')
-               return None
-        from Editeur.editor import Editor
-        editor = Editor(self.appliEficas, fichier, jdc, include)
-        if not editor.jdc :
-            self.appliEficas.afficheMessage('Eficas sans Ihm', 'impossible d allouer un editor')
-            return None
-        self.editors.append(editor)
-        self.dictEditors[editor.idEditor] = editor
-        return editor
-
-      
+
+    # --------------------------
+    def getEditorById(self, eId):
+    # ---------------------------
+        debug = 1
+        if eId in self.dictEditors:
+           return (self.dictEditors[eId], 0, "")
+        if debug : print ("getEditorById : {} non trouve ".format(eId))
+        return (None, 1, "getEditorById : {} non trouve ".format(eId))
 
     # -------------------------
     def samePath(self, f1, f2):
@@ -82,6 +141,8 @@ class EditorManager(object):
     #-------------------------------
     def indexChanged(self, newIndex):
     #--------------------------------
+    # cette fonction n a de sens qu en QT ou ?
+    # comment gerer le contexte?
         if newIndex in self.dictEditors:
             editor = self.dictEditors[newIndex]
             if editor.jdc != None:
@@ -158,6 +219,3 @@ class EditorManager(object):
             return
         self.dictEditors[index].saveFileLegerAs(fileName)
 
-
-
-
index e794efedb45e29c52e36fd12df4c57bfdd0bfa08..4855b5fe7cda7fe7136b4115a5712bde5ff4e295 100755 (executable)
@@ -25,14 +25,27 @@ from Editeur import session
 from Editeur.getVersion import getEficasVersion
 from Accas.extensions.eficas_translation import tr
 
+from threading import Lock
+sessionCount  = 0
+lock = Lock()
 
+
+activeLogging=0
+if activeLogging :
+   from Editeur.loggingEnvironnement import loggingEnvironnement, fonctionLoguee
+else :
+   fonctionLoguee = lambda func: func
+
+
+#-----------------
 class EficasAppli:
+#-----------------
     """
     Class implementing the main user interface.
     """
 
     #---------------------------------------------------------------------------------------------------------------------------------------------
-    def __init__(self, code=None, versionCode=None, salome=1, multi=False, langue="fr", ssCode=None, fichierCata=None, GUIPath=None, appWeb=None):
+    def __init__(self, code=None, versionCode=None, salome=1, multi=False, langue="fr", ssCode=None, cataFile=None, GUIPath=None, appWeb=None):
     #---------------------------------------------------------------------------------------------------------------------------------------------
         """
         Constructor d appli eficas. classe mere de appli-qtEficas et de appli-web eficas et utilisee sans IHM pour les
@@ -51,6 +64,8 @@ class EficasAppli:
         self.multi = multi
         self.salome = salome
         self.appWeb = appWeb
+        self.dictEditorIdSessionId = {}
+        self.dictTypeDeSession = {} # contient le type de la session ( QT, WEB pour rediriger les messages)
 
         version = getEficasVersion()
         self.versionEficas = "Eficas Salome " + version
@@ -63,8 +78,8 @@ class EficasAppli:
         self.mesScripts = {}
         self.listePathAEnlever = []
 
-        if fichierCata == None: self.fichierCata = session.d_env.fichierCata
-        else: self.fichierCata = fichierCata
+        if cataFile == None: self.cataFile = session.d_env.cataFile
+        else: self.cataFile = cataFile
 
         self.versionCode = versionCode
         if session.d_env.versionCode: self.versionCode = session.d_env.versionCode
@@ -84,7 +99,6 @@ class EficasAppli:
             self.definitCode(code, ssCode)
             if code == None: return
         else : 
-            # Est-ce que configBase a un interet avec le web  ?
             from Editeur.configuration import BaseConfiguration
             self.maConfiguration = BaseConfiguration(self)
 
@@ -142,33 +156,47 @@ class EficasAppli:
     def getEditor(self, fichier=None, jdc=None, include=0):
     #------------------------------------------------------
         #PN reflechir a ce que cela veut dire d avoir plusieurs editeurs
+        # en TUI
         if (hasattr(self, "editor")) and self.editor != None:
             print("un seul editeur par application eficas_appli sans Ihm ? ")
         #     sys.exit()
         self.editor = self.editorManager.getEditor(fichier, jdc, include)
         return self.editor
 
+    #--------------------------------------------------------------------------------
+    def getWebEditor(self, sId, cataFile = None, datasetFile=None, jdc=None, include=0):
+    #--------------------------------------------------------------------------------
+        debug = 1
+        if sId == None : 
+           titre = 'Requete non valide'
+           message = 'Le parametre identifiant la Session Eficas est obligatoire'
+           self.propageToWebApp('afficheMessage', titre+texte, 'rouge')
+        self.dictTypeDeSession[sId]  =  'Web'
+        (editor, CR, message)   = self.editorManager.getWebEditor(sId, cataFile,datasetFile, jdc, include)
+        if debug : 
+           print ('getWebEditor id de sesssion :', sId, ' editor : ', editor.editorId)
+           print (editor, CR, message)
+        return (editor, CR, message) 
+
+    #------------------------------------------------------------------------------------------
+    def getTUIEditor (self,sId = None, cataFile = None, datasetFile=None, jdc=None, include=0):
+    #-------------------------------------------------------------------------------------------
+        if sId == None : 
+           self.affichageMessage('Requete non valide', 'Le parametre identifiant la Session Eficas est obligatoire',True)
+        self.dictTypeDeSession[sId]  =  'TUI'
+        (editor, CR, message)   = self.editorManager.getTUIEditor(sId, cata, fichier, fichier, jdc, include)
+        return (editor, CR, message) 
 
-    #--------------------------
-    def getEditorById(self,id):
-    #--------------------------
-        return self.editorManager.getEditorById(id)
+    #---------------------------
+    def getEditorById(self, eId):
+    #----------------------------
+        return self.editorManager.getEditorById(eId)
 
     #----------------------------------
     def setCurrentEditorById(self,id):
     #----------------------------------
         return self.editorManager.setCurrentEditorById(self,id)
 
-    #---------------------------
-    def openDataSet(self, fichier):
-    #---------------------------
-        try:
-            monEditor = self.editorManager.openFile(fichier)
-        except EficasException as exc:
-            self.afficheMessage( 'erreur ouverture fichier', str(exc),critical=True)
-            monEditor = None
-        return monEditor
-
     #------------------
     def fileSave(self):
     #-------------------
@@ -190,15 +218,6 @@ class EficasAppli:
         texteXSD = currentCata.dumpXsd(avecEltAbstrait)
         return texteXSD
 
-    #---------------------------------------------------
-    def afficheMessage(self, titre, texte,critical=True):
-    #----------------------------------------------------
-        print ('__________________________')
-        print (tr(titre))
-        print ('')
-        print (tr(texte))
-        print ('__________________________')
-
 
     #-------------------
     def saveUQFile(self):
@@ -315,6 +334,82 @@ class EficasAppli:
         self.withUQ = True
         self.formatFichierIn = "pythonUQ"  # par defaut
 
+    #----------------------
+    def getSessionId(self):
+    #----------------------
+    # TODO doit on mettre le type de session en parametre ?
+    # tant qu on a pas pris un editor la session est tague TUI
+        global sessionCount
+        try : 
+            with lock:
+                sessionCount += 1
+                self.dictTypeDeSession[sessionCount]='TUI'
+                return (sessionCount, 0, '')
+        except :
+            return (sessionCount, 1, 'impossible de donner un id : {}.format(str(e))')
+
+    #---------------------------------------------------------------------------
+    def propageToWebApp(self, fction, sessionId,  *args, **kwargs):
+    #---------------------------------------------------------------------------
+        #if fction =='propageValide' :
+        debug=1
+        if debug  : print ('PNPNPN : WebEficasAppli.toWebApp',  fction,  *args, **kwargs)
+        if self.appWeb == None  : return
+        self.appWeb.fromConnecteur(fction, sessionId,  *args, **kwargs)
+
+    #--------------------------------------------------------------------------
+    def afficheMessage (self, titre, texte, critical=True, emitEditorId = None ):
+    #--------------------------------------------------------------------------
+        print ('*******************************')
+        if emitEditor != None :
+            print ('message emis par ', emitEditorId)
+
+        print (titre)
+        print ('-------------------------------')
+        print (texte)
+        print ('-------------------------------')
+        if critical : exit(1)
+
+    #--------------------------------------------------------------------------
+    # Est-ce que cela sera utilise ?
+    def propageMessage (self, titre, texte, critical=True, emitEditorId = None ):
+    #--------------------------------------------------------------------------
+        if emitEditorId == None :
+           self.afficheMessage(titre, texte, critical)
+           return
+        for sessionId in self.dictEditorIdSessionId[emitEditorId]:
+            if self.dictTypeDeSession[sessionId] == 'TUI':
+               self.afficheMessage(self, titre, texte, critical, emitEditorId )
+            elif self.dictTypeDeSession[sessionId] == 'Web':
+                if critical : self.propageToWebApp('afficheMessage', sessionId,  titre+texte, 'rouge')
+                else : self.propageToWebApp('afficheMessage', sessionId, titre+texte)
+            else :
+                print ('propageInfo de Appli  : pb de type de session dans eficas')
+                
+    #-------------------------------------------------------------------------------------
+    def propageChange (self, emitSessionId, emitEditorId, toAll , fction, *args, **kwargs):
+    #--------------------------------------------------------------------------------------
+        debug = 1
+        if debug : 
+           print ("------------------------------------------ Eficas")
+           print ('propageChange avec les arguments ')
+           print ( emitSessionId, emitEditorId, toAll , fction, *args, **kwargs)
+           print (self.dictEditorIdSessionId)
+           print ("------------------------------------------ ")
+        for sessionId in self.dictEditorIdSessionId[emitEditorId]:
+            print ('sessionId', sessionId)
+            if not toAll and sessionId == emitSessionId : continue
+            if self.dictTypeDeSession[sessionId] == 'TUI': 
+                print ('la session est TUI, on ne fait rien')
+                continue # Rien a faire le JDC est correcte
+            elif self.dictTypeDeSession[sessionId] == 'Web': # on verra le QT apres
+                print ('on propage pour ', sessionId )
+                self.propageToWebApp(fction, sessionId,  *args, **kwargs)
+
+    #---------------------------------------------------------------------------
+    #PN --> normalement les codes retours et les messages de retour sont suffisants
+    #def displayMessageInSid (self, Sid, titre, texte, critical=True ):
+    #---------------------------------------------------------------------------
 
 if __name__ == "__main__":
     # Modules Eficas
index 3ce489f8d505510b434a0a42091ccd36dae9e207..3757de6c8efa9f046ee41e83e8f562f13330111d 100755 (executable)
@@ -62,8 +62,8 @@ def lanceQtEficas(code=None, versionCode = None, multi=False, langue="en",  GUIP
     sys.exit(res)
 
 
-def getEficas( code=None, ssCode = None, versionCode = None , multi=False, langue="en", GUIPath=None, appWeb = None, fichierCata = None):
-# ---------------------------------------------------------------------------------------------------------------------------------------
+def getEficas( code=None, ssCode = None, versionCode = None , multi=False, langue="en", appWeb = None, cataFile = None):
+# --------------------------------------------------------------------------------------------------------------------------
     """
     instancie l'appli EFICAS sans Ihm
     """
@@ -73,19 +73,20 @@ def getEficas( code=None, ssCode = None, versionCode = None , multi=False, langu
     if options.code != None:
         code = options.code
 
-    if GUIPath in ('QT5',  'cinqC') :
-        pathAbso=os.path.abspath(os.path.join(os.path.dirname(__file__),'..','InterfaceGUI',GUIPath))
-        if pathAbso not in sys.path : sys.path.insert(0,pathAbso)
-        from qt_eficas import QtEficasAppli as EficasAppli
-    if GUIPath in ( 'Web') :
-        pathAbso=os.path.abspath(os.path.join(os.path.dirname(__file__),'..','InterfaceGUI',GUIPath))
-        if pathAbso not in sys.path : sys.path.insert(0,pathAbso)
-        from web_eficas import WebEficasAppli as EficasAppli
-    else :
-        print ('lancement de Eficas avec GUIPath = {}'.format(GUIPath))
-        from Editeur.eficas_appli import EficasAppli
-
-    Eficas = EficasAppli(code=code, multi=multi, langue=langue, ssCode=ssCode, versionCode=versionCode,  fichierCata=fichierCata, GUIPath=GUIPath, appWeb=appWeb)
+    #if GUIPath in ('QT5',  'cinqC') :
+    #    print ('Attention : Pour lancer l application QT5 utiliser lanceQTEficas')
+    #    return
+        #pathAbso=os.path.abspath(os.path.join(os.path.dirname(__file__),'..','InterfaceGUI',GUIPath))
+        #if pathAbso not in sys.path : sys.path.insert(0,pathAbso)
+        #from qt_eficas import QtEficasAppli as EficasAppli
+    #if GUIPath in ( 'Web') :
+    #    pathAbso=os.path.abspath(os.path.join(os.path.dirname(__file__),'..','InterfaceGUI',GUIPath))
+    #    if pathAbso not in sys.path : sys.path.insert(0,pathAbso)
+    #    from web_eficas import WebEficasAppli as EficasAppli
+    #else :
+    print ('lancement de Eficas sans QT ')
+    from Editeur.eficas_appli import EficasAppli
+    Eficas = EficasAppli(code=code, multi=multi, langue=langue, ssCode=ssCode, salome = 0 , versionCode=versionCode,  cataFile=cataFile,  appWeb=appWeb)
     return Eficas
 
 
@@ -95,7 +96,7 @@ def genereXSD(code=None):
     options = session.parse(sys.argv)
     if code != None:
         options.code = code
-    if options.fichierCata == None:
+    if options.cataFile == None:
         print("Use -c cata_name.py")
         return
 
@@ -104,10 +105,10 @@ def genereXSD(code=None):
     monEditor = monEficas.getEditor()
     texteXSD = monEditor.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
 
-    fichierCataTrunc = os.path.splitext(os.path.basename(options.fichierCata))[0]
-    # if fichierCataTrunc[0:4] in ('cata','Cata'): fichierCataTrunc=fichierCataTrunc[4:]
-    # if fichierCataTrunc[0] in ('_','-') : fichierCataTrunc=fichierCataTrunc[1:]
-    fileXSD = fichierCataTrunc + ".xsd"
+    cataFileTrunc = os.path.splitext(os.path.basename(options.cataFile))[0]
+    # if cataFileTrunc[0:4] in ('cata','Cata'): cataFileTrunc=cataFileTrunc[4:]
+    # if cataFileTrunc[0] in ('_','-') : cataFileTrunc=cataFileTrunc[1:]
+    fileXSD = cataFileTrunc + ".xsd"
 
     f = open(str(fileXSD), "w")
     f.write(str(texteXSD))
@@ -120,7 +121,7 @@ def genereXML(code=None):
     options = session.parse(sys.argv)
     if code != None:
         options.code = code
-    if options.fichierCata == None:
+    if options.cataFile == None:
         print("Use -c cata_name.py")
         return
     try:
@@ -155,7 +156,7 @@ def genereStructure(code=None):
     options = session.parse(sys.argv)
     if code != None:
         options.code = code
-    if options.fichierCata == None:
+    if options.cataFile == None:
         print("Use -c cata_name.py")
         return
 
@@ -163,8 +164,8 @@ def genereStructure(code=None):
     monEditor = monEficas.getEditor()
     texteStructure = monEditor.dumpStructure()
 
-    fichierCataTrunc = os.path.splitext(os.path.basename(options.fichierCata))[0]
-    fileStructure = fichierCataTrunc + ".txt"
+    cataFileTrunc = os.path.splitext(os.path.basename(options.cataFile))[0]
+    fileStructure = cataFileTrunc + ".txt"
     f = open(str(fileStructure), "w")
     f.write(str(texteStructure))
     f.close()
@@ -177,7 +178,7 @@ def validateDataSet(code=None):
     options = session.parse(sys.argv)
     if code != None:
         options.code = code
-    if options.fichierCata == None:
+    if options.cataFile == None:
         print("Use -c cata_name.py")
         return
     fichier = options.comm[0]
@@ -234,7 +235,7 @@ def validateFonction(laFonction, debug=False):
 
 
 
-def createObjetPythonFromDocumentAccas(fichierCata=None, fichier=None, code=None):
+def createObjetPythonFromDocumentAccas(cataFile=None, fichier=None, code=None):
 # --------------------------------------------------------------------------------
 # activeSurcharge permet de surcharger [ pour
 # acceder aux objets Accas comme en python
@@ -242,7 +243,7 @@ def createObjetPythonFromDocumentAccas(fichierCata=None, fichier=None, code=None
     if fichier == None:
         print("file is needed")
         return None
-    if fichierCata == None:
+    if cataFile == None:
         print("cata file is needed")
         return None
 
@@ -250,7 +251,7 @@ def createObjetPythonFromDocumentAccas(fichierCata=None, fichier=None, code=None
     activeSurcharge()
     from .editorSsIhm import JDCEditorSsIhm
 
-    monEficas = getEficas(code="Essai", fichierCata=fichierCata)
+    monEficas = getEficas(code="Essai", cataFile=cataFile)
     monEditeur = JDCEditorSsIhm(monEficas, fichier)
     return monEditeur.jdc
 
index 84dc2859da907c66a12d2349fecd363f8b091670..48c90f7b966eadcc6a32ca885ace1eda34d24c89 100644 (file)
@@ -31,7 +31,7 @@ class loggingEnvironnement(object):
         loggerForTrace.info('monEficasConnecteur=accasConnecteur("{}")'.format(code))
 
 
-def fonctionLoguee(laFonction, debug=True):
+def fonctionLoguee(laFonction, debug=False):
 #-------------------------------------------
     from inspect  import  getfullargspec
     from functools import wraps
diff --git a/Editeur/old/web_eficas.py b/Editeur/old/web_eficas.py
new file mode 100755 (executable)
index 0000000..a13ef51
--- /dev/null
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024   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
+#
+import os, sys
+
+from Editeur.eficas_appli import EficasAppli
+from InterfaceGUI.Web.web_editor_manager import WebEditorManager
+from Accas.extensions.eficas_exception import EficasException
+
+activeLogging=0
+if activeLogging :
+   from Editeur.loggingEnvironnement import loggingEnvironnement, fonctionLoguee
+else :
+   fonctionLoguee = lambda func: func
+
+#--------------------------------#
+class WebEficasAppli(EficasAppli):
+#--------------------------------#
+    """
+    Class implementing the main QT user interface.
+    """
+
+    #---------------------------------------------------------------------------------------------------------------------------------------------------------
+    def __init__(self, code=None, versionCode=None, salome=0, multi=False, langue="fr", ssCode=None, cataFile=None, GUIPath="InterfaceGUI.QT5", appWeb=None):
+    #---------------------------------------------------------------------------------------------------------------------------------------------------------
+        """
+        Constructor
+        """
+        EficasAppli.__init__( self, code, versionCode, salome, multi, langue,  ssCode, cataFile, GUIPath, appWeb)
+        self.editorManager = WebEditorManager(self)
+        if self.appWeb == None : 
+           super().afficheMessage ('lancement Eficas WEB' , 'le parametre appWeb est obligatoire')
+           return 
+
+
+    #------------------------------------------
+    def toWebApp(self,fction, *args, **kwargs):
+    #------------------------------------------
+        #if fction =='propageValide' :
+        debug=0
+        if debug  : print ('PNPNPN : WebEficasAppli.toWebApp',  fction, sid, eid, *args, **kwargs)
+        if self.appWeb == None  : return
+        #if fction =='propageValide' : print ('self.appWeb.toWebApp propageValide', self.monEditeur.getNodeById(args[0]).nom)
+        self.appWeb.fromConnecteur(fction, *args, **kwargs)
+
+
+    @fonctionLoguee
+    #------------------------------------------------
+    def openDataset(self, sid, cataFile, datasetFile):
+    #--------------------------------------------------
+        try:
+            (monEditor, codeErreur, message)  = self.editorManager.openDataset(sid, cataFile, datasetFile)
+        except EficasException as exc:
+            self.afficheMessage('erreur ouverture fichier', str(exc),critical=True)
+            monEditor = None
+        return (monEditor, codeErreur, message)
+
+    @fonctionLoguee
+    #-----------------------------------------------------
+    def afficheMessage (self, titre, texte,critical=True):
+    #-----------------------------------------------------
+#TODO : le afficheMessage doit tenir compte de qui
+        if critical : 
+           self.toWebApp('afficheMessage', titre+texte, 'rouge')
+        else :
+           self.toWebApp('afficheMessage', titre+texte)
+
+
+if __name__ == "__main__":
+    print ('todo')
index 48a44ec86f6c43c7f6f2e2c5f1f191e7d6296d36..544e84de3d0abd1f8604878c27428b4b74f6b264 100644 (file)
@@ -310,7 +310,7 @@ def createparser():
         "--cata",
         action="store",
         type="string",
-        dest="fichierCata",
+        dest="cataFile",
         help=tr("catalogue a utiliser"),
     )
 
@@ -389,8 +389,8 @@ def parse(args):
     if not hasattr(options, "studies"):
         options.studies = []
         options.comm = []
-    if not hasattr(options, "fichierCata"):
-        options.fichierCata = None
+    if not hasattr(options, "cataFile"):
+        options.cataFile = None
     if not hasattr(options, "versionCode"):
         options.versionCode = None
     if not hasattr(options, "fichierXMLOut"):
index c8b5b2f7c4f61e4e134feaaceb6bef0393c5ad3b..87f2be05f490c7dacc5150e2935556fd38af4483 100755 (executable)
@@ -2509,9 +2509,9 @@ class X_JDC_CATA:
 
     def dumpAvecEltAbstraitDesCommandes(self):
         cata = CONTEXT.getCurrentCata()
-        fichierCataSourceExt = os.path.basename(cata.cata.__file__)
-        fichierCataSource, extension = os.path.splitext(fichierCataSourceExt)
-        importCataSource = __import__(fichierCataSource, {}, {})
+        cataFileSourceExt = os.path.basename(cata.cata.__file__)
+        cataFileSource, extension = os.path.splitext(cataFileSourceExt)
+        importCataSource = __import__(cataFileSource, {}, {})
 
         texte = ""
         for m in sys.modules:
@@ -2555,7 +2555,7 @@ class X_JDC_CATA:
                     continue
                 if monModule.__name__[0:12] == "InterfaceQT":
                     continue
-                if monModule.__name__ == fichierCataSource:
+                if monModule.__name__ == cataFileSource:
                     continue
                 texte = texte + "try : import " + monModule.__name__ + " \n"
                 texte = texte + "except : pass \n"
diff --git a/InterfaceGUI/Common/traiteSaisie.py b/InterfaceGUI/Common/traiteSaisie.py
deleted file mode 100644 (file)
index c2a93a1..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2024   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
-#
-
-import types
-from Accas.extensions.eficas_translation import tr
-
-#--------------------------
-class SaisieValeur(object):
-#--------------------------
-    """
-    Classe contenant les methodes communes aux  panels
-    permettant de choisir des valeurs
-    """
-
-    def valeurChanged(self,valeur=None):
-    #-----------------------------------
-    # pour la partie Web
-        debug=0
-        if debug :  print('valeurChanged', valeur, type(valeur))
-        nouvelleValeurFormat=self.politique.getValeurTexte(nouvelleValeur)
-        validite,commentaire=self.politique.recordValeur(nouvelleValeurFormat)
-        if commentaire != "" :
-            if validite : self.editor.afficheCommentaire(commentaire)
-            else        : self.editor.afficheMessage(commentaire,'red')
-        self.inSaisieValeur=False
-        self.setValide()
-
-
-    def LEvaleurPressed(self, valeur=None):
-    #---------------------------------------
-    # pour la partie Qt
-        debug=0
-        if debug :  print('LEvaleurPressed', valeur, type(valeur))
-        if not hasattr(self, "inSaisieValeur"): self.inSaisieValeur = False
-        if self.inSaisieValeur: return
-        self.inSaisieValeur = True
-
-        if valeur == None:
-            try:
-                nouvelleValeur = str(self.lineEditVal.text())
-            except UnicodeEncodeError as e:
-                self.editor.afficheMessage("pb d encoding", Qt.red)
-                validite, commentaire = self.politique.recordValeur(None)
-                self.lineEditVal.setText("")
-                self.setValide()
-                self.inSaisieValeur = False
-                return
-        else:
-            try:
-                # la 1 ligne est tres bizarre. remplacee par le 3nd le 01 10 19
-                # if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
-                if hasattr(self, "lineEditVal"): self.lineEditVal.setText(tr(valeur))
-            except:
-                if hasattr(self, "lineEditVal"): self.lineEditVal.setText(valeur)
-            nouvelleValeur = valeur
-
-        if self.node.item.definition.validators != None:
-            if self.node.item.definition.validators.verifItem(nouvelleValeur) != 1:
-                commentaire = self.node.item.definition.validators.infoErreurItem()
-                self.editor.afficheMessage(commentaire, Qt.red)
-                self.inSaisieValeur = False
-                return
-
-        nouvelleValeurFormat = self.politique.getValeurTexte(nouvelleValeur)
-        validite, commentaire = self.politique.recordValeur(nouvelleValeurFormat)
-        if commentaire != "":
-            if validite: self.editor.afficheCommentaire(commentaire)
-            else: self.editor.afficheMessage(commentaire, 'red')
-        self.inSaisieValeur = False
-        self.setValide()
-
-    def TraiteLEValeur(self, valeurTraitee=None):
-    #---------------------------------------------
-        # pour Qt
-        # lit la chaine entree dans le lineedit
-        # et la tranforme en chaine de valeurs
-        # attention eventuellement aux complexes
-
-        listeValeurs = []
-        if valeurTraitee == None:
-            valeurBrute = str(self.LEValeur.text())
-        else:
-            valeurBrute = valeurTraitee
-        if valeurBrute == str(""): return listeValeurs, 1
-        return self.traiteValeurSaisie(valeurBrute)
-
-    def traiteValeurSaisie(self, valeurSaisie):
-    #---------------------------------------
-        # appelé directerment pour le web 
-        # ou pour QT via la fonction TraiteLEValeur 
-        listeValeurs = []
-        valeurBrute = valeurSaisie
-        try:    valeur = eval(valeurBrute, {})
-        except: valeur = valeurBrute
-
-        # pour traiter 11.0 - 30.0 pour le CIST
-        # if (valeurTraitee and (type(valeurTraitee) in types.StringTypes) and (self.node.item.waitTxm())) :
-        if (
-            valeurTraitee
-            and isinstance(valeurTraitee, str)
-            and (self.node.item.waitTxm())
-        ):
-            valeur = str(valeurTraitee)
-
-        if type(valeur) in (list, tuple):
-            if self.node.item.waitComplex():
-                indice = 0
-                while indice < len(valeur):
-                    v = valeur[indice]
-
-                    if v == "RI" or v == "MP":
-                        try:
-                            t = tuple([v, valeur[indice + 1], valeur[indice + 2]])
-                            listeValeurs.append(t)
-                            indice = indice + 3
-                        except:
-                            commentaire = tr(
-                                "Veuillez entrer le complexe sous forme aster ou sous forme python"
-                            )
-                            self.editor.afficheMessage(commentaire)
-                            return listeValeurs, 0
-
-                    else:  # ce n'est pas un tuple a la mode aster
-                        listeValeurs.append(v)
-                        indice = indice + 1
-
-            else:  # on n'attend pas un complexe
-                listeValeurs = valeurBrute.split(",")
-
-        elif type(valeur) == bytes:
-            listeValeurs = valeur.split(",")
-        else:
-            # listeValeurs.append(valeurBrute)
-            listeValeurs.append(valeur)
-
-        return listeValeurs, 1
-
-
-class SaisieSDCO(object):
-    def LESDCOReturnPressed(self):
-        """
-        Lit le nom donne par l'utilisateur au concept de type CO qui doit être
-        la valeur du MCS courant et stocke cette valeur
-        """
-        self.editor.initModif()
-        anc_val = self.node.item.getValeur()
-        if anc_val != None:
-            # il faut egalement propager la destruction de l'ancien concept
-            self.node.item.deleteValeurCo(valeur=anc_val)
-            # et on force le recalcul des concepts de sortie de l'etape
-            self.node.item.object.etape.getType_produit(force=1)
-            # et le recalcul du contexte
-            self.node.item.object.etape.parent.resetContext()
-        nomConcept = str(self.LESDCO.text())
-        if nomConcept == "":
-            return
-
-        test, commentaire = self.node.item.setValeurCo(nomConcept)
-        if test:
-            commentaire = tr("Valeur du mot-clef enregistree")
-            self.node.updateNodeValid()
-        else:
-            cr = self.node.item.getCr()
-            commentaire = tr("Valeur du mot-clef non autorisee :") + cr.getMessFatal()
index e78cbdbc2e67463bc7c6eb9076f34e534eab259e..02b96ff779e16cc348ed29e1fbfa214f03d04f66 100644 (file)
@@ -30,7 +30,7 @@ from Accas.extensions.eficas_translation import tr
 
 from InterfaceGUI.QT5.gereIcones import ContientIcones
 from InterfaceGUI.QT5.gereIcones import FacultatifOuOptionnel
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 nomMax = 230
 
index 4e3ef31cbbd6aff3f4af57871681a91b9fff4af8..adf79e8837be044f622d9e6a14babfe587e47b14 100644 (file)
@@ -51,8 +51,8 @@ class MonChoixCommande(Ui_ChoixCommandes, QWidget):
         debutTitre = self.editor.titre
         self.listeWidget = []
         self.dicoCmd = {}
-        if self.editor.fichier != None:
-            nouveauTitre = debutTitre + " " + os.path.basename(self.editor.fichier)
+        if self.editor.dataSetFile != None:
+            nouveauTitre = debutTitre + " " + os.path.basename(self.editor.dataSetFile)
         else:
             nouveauTitre = debutTitre
         self.editor.appliEficas.setWindowTitle(nouveauTitre)
index 8413018ec491ddc204f916ce34a4ee48b30786bc..8e236899374987d0d4251bc238d1dbb3eaaa9bd8 100644 (file)
@@ -24,7 +24,7 @@ from PyQt5.QtCore import Qt
 
 
 # Modules Eficas
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 from InterfaceGUI.QT5.monPlusieursBasePanel import MonPlusieursBasePanel
 
 from Accas.extensions.eficas_translation import tr
index 7e20243cb6be1320f9b966c00feacdc363d96012..a3ce03c919de5f3d9e5fb943a96b9fa1b34c24de 100644 (file)
@@ -27,7 +27,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetCB import Ui_WidgetCB
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 from PyQt5.QtWidgets import QComboBox, QCompleter
 from PyQt5.QtCore import Qt, QEvent
index 92a03d673ee829132f552d34c2cbaa455116c02d..bd45781921f7d285b2b60bb817387cf28df4ffcd 100644 (file)
@@ -27,7 +27,7 @@ from Accas.extensions.eficas_translation import tr
 
 from InterfaceGUI.QT5.feuille import Feuille
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 from UiQT5.desWidgetCBIntoSug import Ui_WidgetCBIntoSug
 
 from PyQt5.QtWidgets import QComboBox, QCompleter
index 08a5e1aa641589cb3ff4daca910d3c9316ed1a28..21cd2653fe24401e60a6ed73fb5ac457911a92ef 100644 (file)
@@ -27,7 +27,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetCB import Ui_WidgetCB
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 
 from PyQt5.QtWidgets import QComboBox, QCompleter
index 52ad151fdefad2d87b187015560b37c106eb875e..855a8fa4b7e689a1edf2d4f7d7081a1508eb5a36 100644 (file)
@@ -238,10 +238,11 @@ class MonWidgetCommande(Ui_WidgetCommande, Groupe):
         self.editor.afficheCommentaire(mess)
 
         # Notation scientifique
-        if test:
-            from InterfaceGUI.Common.politiquesValidation import Validation
-            validation = Validation(self.node, self.editor)
-            validation.ajoutDsDictReelEtape()
+        # 5 mars 24 : completement idiot ?
+        #if test:
+        #    from InterfaceGUI.Common.politiquesValidation import Validation
+        #    validation = Validation(self.node, self.editor)
+        #    validation.ajoutDsDictReelEtape()
 
     def afficheOptionnel(self):
         # N a pas de parentQt. doit donc etre redefini
index 057d420fe56b9468434e1ed7170a8c58abdeec04..fb64b01427cfd99c8525bb355b432e3cf8a281f8 100644 (file)
@@ -30,7 +30,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetPlusieursBase import Ui_WidgetPlusieursBase
 from InterfaceGUI.Common.politiquesValidation import PolitiquePlusieurs
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 from InterfaceGUI.QT5.gereListe import GereListe
 from InterfaceGUI.QT5.gereListe import GerePlie
 from InterfaceGUI.QT5.gereListe import LECustom
index f2737eeca2f50ad1aeb7b4921fa2b8ddc318a6bb..42632d60265850327f27f3ca23106c81d1ae1883 100644 (file)
@@ -29,7 +29,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetPlusieursInto import Ui_WidgetPlusieursInto
 from InterfaceGUI.Common.politiquesValidation import PolitiquePlusieurs
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 from InterfaceGUI.QT5.gereListe import GerePlie
 from InterfaceGUI.QT5.gereListe import GereListe
 
index 829e2a684232e4540a06f461de3169afb3aa6118..59cf2930976ecf62d24f9271698acb0b06369f61 100644 (file)
@@ -24,7 +24,7 @@ import types, os
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetPlusieursIntoOrdonne import Ui_WidgetPlusieursIntoOrdonne
 from InterfaceGUI.Common.politiquesValidation import PolitiquePlusieurs
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 from InterfaceGUI.QT5.gereListe import GereListe
 from InterfaceGUI.QT5.gereListe import GerePlie
 from InterfaceGUI.QT5.gereListe import LECustom
index 07b2eb88cf695854ef47e878da3eddfd21254491..6742cacaa68f9bad668597e65aeee42b84bac9f9 100644 (file)
@@ -29,7 +29,7 @@ from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetPlusieursPlie import Ui_WidgetPlusieursPlie
 
 from InterfaceGUI.Common.politiquesValidation import PolitiquePlusieurs
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 pattern_blanc = re.compile(r"^\s*$")
 
index 5c4384b0c406d96090c5a8dcb4a4e35b091518e3..9ea57684ef6725b96684f57a2ce5c8ce34b7af12 100644 (file)
@@ -27,7 +27,7 @@ from Accas.extensions.eficas_translation import tr
 
 from InterfaceGUI.QT5.feuille import Feuille
 from InterfaceGUI.Common.politiquesValidation import PolitiquePlusieurs
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 from InterfaceGUI.QT5.gereListe import GereListe
 from InterfaceGUI.QT5.gereListe import LECustom
 from UiQT5.Tuple2 import Ui_Tuple2
index f57845d6e70376b4aeebf5cb46eca084f0c35fa7..8467ec4f374d7f9e5bb3f0025f69b06bae131743 100644 (file)
@@ -31,7 +31,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetRadioButton import Ui_WidgetRadioButton
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 
 class MonWidgetRadioButtonCommun(Feuille):
index 3fa7368a48133ed6cd062a6ee107cc10874c7069..b2a4d2e826d43c86225a6417c4ba794ed32c00a7 100644 (file)
@@ -25,7 +25,7 @@ from Accas.extensions.eficas_translation import tr
 
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetSDCOInto import Ui_WidgetSDCOInto
-from InterfaceGUI.Common.traiteSaisie import SaisieSDCO
+from InterfaceGUI.QT5.traiteSaisie import SaisieSDCO
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
 
 
index 51442f63c17681443d825d94400b6b61536e090f..1dbdf19494220da367b381e128edd6553ac00de5 100644 (file)
@@ -26,7 +26,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetSimpBase import Ui_WidgetSimpBase
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 
 class MonWidgetSimpBase(Ui_WidgetSimpBase, Feuille):
index 39fd2bd2b3fa5e19b6f959e4cbcfb342a127fac8..bd160d02f44ebaecd9bbaef9ecd2155411db3f20 100644 (file)
@@ -25,7 +25,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetSimpBool import Ui_WidgetSimpBool
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 
 class MonWidgetSimpBool(Ui_WidgetSimpBool, Feuille):
index ba16f9d7cc9261d308b6ec051ca0adf7037fd3a1..debbd00dc965f01f11f9d69296079824c895701e 100644 (file)
@@ -30,7 +30,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetSimpComplexe import Ui_WidgetSimpComplexe
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 
 class MonWidgetSimpComplexe(Ui_WidgetSimpComplexe, Feuille):
index 024dfe57cf4f9fb8b5fb0f79866403de04ea81c7..192775bd0ab76d16cba32c25c4dd33f795390045 100644 (file)
@@ -26,7 +26,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetSimpSalome import Ui_WidgetSimpSalome
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 
 class MonWidgetSimpSalome(Ui_WidgetSimpSalome, Feuille):
index 938ffc018cadd93fa9c220a3d25eeab63cb3b4af..c21596ff329b593ac8a02dff8b284534461faeba 100644 (file)
@@ -25,7 +25,7 @@ from Accas.extensions.eficas_translation import tr
 
 from InterfaceGUI.QT5.feuille import Feuille
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieValeur
+from InterfaceGUI.QT5.traiteSaisie import SaisieValeur
 
 
 class MonWidgetSimpTuple(Feuille):
index ae61327f8e2b13eb0a1b5ac5f81cd1bdca9f2599..c84921457247b1fe33eff99da7189bc6a3cd0511 100644 (file)
@@ -26,7 +26,7 @@ from Accas.extensions.eficas_translation import tr
 from InterfaceGUI.QT5.feuille import Feuille
 from UiQT5.desWidgetUniqueSDCO import Ui_WidgetUniqueSDCO
 from InterfaceGUI.Common.politiquesValidation import PolitiqueUnique
-from InterfaceGUI.Common.traiteSaisie import SaisieSDCO
+from InterfaceGUI.QT5.traiteSaisie import SaisieSDCO
 
 
 class MonWidgetUniqueSDCO(Ui_WidgetUniqueSDCO, Feuille, SaisieSDCO):
index 6c35db38d27d63fcf847d3be874370bccc1ed1ac..17907914942cca0601e97de7128b4da265104681 100755 (executable)
@@ -52,7 +52,7 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
     Editeur de jdc
     """
 
-    def __init__( self, appliEficas, fichier=None, jdc=None, QWParent=None, include=0):
+    def __init__( self, appliEficas, cataFile = None, fichier=None, jdc=None, QWParent=None, include=0):
     # -----------------------------------------------------------------------------------------------
 
         QWidget.__init__(self, None)
@@ -69,11 +69,11 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
             self.sb = None
         self.QWParent = QWParent
 
-        Editor.__init__(self, appliEficas, fichier, jdc, include)
+        Editor.__init__(self, appliEficas=appliEficas, cataFile = cataFile , dataSetFile = fichier , jdc = jdc, include = include)
 
         # on enleve la gestion du dicEditor necessaire dans les autres cas
-        # mais ici l index est le numero de page et non l idEditor
-        del self.appliEficas.editorManager.dictEditors[self.idEditor]
+        # mais ici l index est le numero de page et non l editorId
+        del self.appliEficas.editorManager.dictEditors[self.editorId]
 
         if self.jdc:
             comploader.chargerComposants(self.appliEficas.GUIPath)
@@ -137,7 +137,7 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
         #        qApp.restoreOverrideCursor()
         if self.fileInfo != None:
             self.lastModified = self.fileInfo.lastModified()
-        nouveauTitre = self.titre + "              " + os.path.basename(self.fichier)
+        nouveauTitre = self.titre + "              " + os.path.basename(self.dataSetFile)
         self.appliEficas.setWindowTitle(nouveauTitre)
 
         return jdc
@@ -656,9 +656,9 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
         path = self.maConfiguration.saveDir
 
         monNomFichier = ""
-        if self.fichier is not None and self.fichier != "":
-            maBase = str(QFileInfo(self.fichier).baseName()) + ".input"
-            monPath = str(QFileInfo(self.fichier).absolutePath())
+        if self.dataSetFile is not None and self.dataSetFile != "":
+            maBase = str(QFileInfo(self.dataSetFile).baseName()) + ".input"
+            monPath = str(QFileInfo(self.dataSetFile).absolutePath())
             monNomFichier = os.path.join(monPath, maBase)
         elif hasattr(self, "monNomFichierInput"):
             monNomFichier = self.monNomFichierInput
@@ -788,8 +788,8 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
             extension = ".comm"
 
         newName = None
-        fn = self.fichier
-        if self.fichier is None or saveas:
+        fn = self.dataSetFile
+        if self.dataSetFile is None or saveas:
             if path is None:
                 path = self.maConfiguration.saveDir
             bOK, fn = self.determineNomFichier(path, extension)
@@ -807,10 +807,10 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
 
         if not (self.writeFile(fn, formatLigne=formatLigne)):
             return (0, None)
-        self.fichier = fn
+        self.dataSetFile = fn
         self.modified = False
         if self.fileInfo is None or saveas:
-            self.fileInfo = QFileInfo(self.fichier)
+            self.fileInfo = QFileInfo(self.dataSetFile)
             self.fileInfo.setCaching(0)
         self.lastModified = self.fileInfo.lastModified()
         if newName is not None:
@@ -819,7 +819,7 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
             self.tree.racine.updateNodeLabel()
 
         if self.jdc.cata.modeleMetier:
-            self.jdc.toXml(self.fichier)
+            self.jdc.toXml(self.dataSetFile)
         if self.jdc.cata.modeleMetier and self.jdc.isValid():
             if self.myWriter != self.XMLWriter:
                 self.XMLWriter.gener(self.jdc)
@@ -837,7 +837,7 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
             res = msgBox.exec_()
             if res == 0:
                 self.myWriter.writeDefault(fn)
-                return (1, self.fichier)
+                return (1, self.dataSetFile)
             if res == 2:
                 return (0, None)
             if self.appliEficas.salome:
@@ -846,14 +846,14 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
                 sys.exit(1)
 
         if self.appliEficas.salome:
-            self.appliEficas.addJdcInSalome(self.fichier)
+            self.appliEficas.addJdcInSalome(self.dataSetFile)
         self.modified = 0
         nouveauTitre = (
-            self.titre + "              " + str(os.path.basename(self.fichier))
+            self.titre + "              " + str(os.path.basename(self.dataSetFile))
         )
         self.appliEficas.setWindowTitle(nouveauTitre)
 
-        return (1, self.fichier)
+        return (1, self.dataSetFile)
 
     # ---------------------------------------#
     def sauvePourPersalys(self, fichier=None):
@@ -865,7 +865,7 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
                 critique=False,
             )
             return
-        if self.fichier is None:
+        if self.dataSetFile is None:
             if path is None:
                 path = self.maConfiguration.saveDir
             bOK, fn = self.determineNomFichier(path, "comm")
@@ -878,9 +878,9 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
             ulfile = os.path.abspath(fn)
             self.appliEficas.maConfiguration.saveDir = os.path.split(ulfile)[0]
             fn = QDir.toNativeSeparators(fn)
-            self.fichier = fn
+            self.dataSetFile = fn
         else:
-            fn = self.fichier
+            fn = self.dataSetFile
         ret, comm = Editor.sauvePourPersalys(self, fn)
         if not ret:
             if not comm:
@@ -891,7 +891,7 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
     # --------------------------------------------#
     def saveUQFile(self, fichier=None, path=None):
     # -------------------------------------------#
-        if self.fichier is None:
+        if self.dataSetFile is None:
             if path is None:
                 path = self.maConfiguration.saveDir
             bOK, fn = self.determineNomFichier(path, "comm")
@@ -903,9 +903,9 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
             ulfile = os.path.abspath(fn)
             self.appliEficas.maConfiguration.saveDir = os.path.split(ulfile)[0]
             fn = QDir.toNativeSeparators(fn)
-            self.fichier = fn
+            self.dataSetFile = fn
         else:
-            fn = self.fichier
+            fn = self.dataSetFile
 
         if self.jdc.isValid() == 0:
             msgBox = QMessageBox(None)
@@ -924,10 +924,10 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
             if res == 0:
                 ret, fichier = Editor.saveUQFile(self, fn)
                 if ret:
-                    self.fichier = fichier
+                    self.dataSetFile = fichier
                 if self.appliEficas.salome and ret:
-                    self.appliEficas.addJdcInSalome(self.fichier)
-                return (1, self.fichier)
+                    self.appliEficas.addJdcInSalome(self.dataSetFile)
+                return (1, self.dataSetFile)
             if self.appliEficas.salome:
                 self.appliEficas.close()
             else:
@@ -939,13 +939,13 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
                 titre = "Probleme de sauvegarde des fichiers"
                 texte = "Impossible de sauvegarder {}".format(fn)
                 QMessageBox.information(self, titre, texte)
-            return (0, self.fichier)
-        return (1, self.fichier)
+            return (0, self.dataSetFile)
+        return (1, self.dataSetFile)
 
     # --------------------------------------#
     def exeUQ(self, fichier=None, path=None):
     # --------------------------------------#
-        # if self.modified or not self.fichier :
+        # if self.modified or not self.dataSetFile :
         sauvegarde, fichier = self.saveUQFile()
         if not sauvegarde:
             return 0
@@ -988,7 +988,7 @@ class QtEditor(Editor, Ui_baseWidget, QWidget):
             the name of the saved file
         """
         if fileName != None:
-            self.fichier = fileName
+            self.dataSetFile = fileName
             return self.saveFile()
         return self.saveFile(path, 1, "beautifie")
 
index 3bb049c63e6ed883b69158d6688d9cb09625f6e8..4d480d4dcd304cebf7343f5d430376639f7cbb62 100644 (file)
@@ -351,7 +351,7 @@ class QtEditorManager(EditorManager):
     #----------------------
         index = self.myQtab.currentIndex()
         editor = self.dictEditors[index]
-        oldName = editor.fichier
+        oldName = editor.dataSetFile
         ok, newName = editor.saveFileAs()
         if ok:
             fileName = os.path.basename(newName)
@@ -374,7 +374,7 @@ class QtEditorManager(EditorManager):
         if fn != None:
             titre = fn.split("/")[-1]
         editor = self.getEditor(fichier=fn, jdc=jdc, include=1)
-        self.appliEficas.addToRecentList(editor.getFileName())
+        self.appliEficas.addToRecentList(editor.getDataSetFileName())
 
 
     #------------------------------------------------------------------
@@ -388,7 +388,7 @@ class QtEditorManager(EditorManager):
         double = None
         for indexEditor in self.dictEditors:
             editor = self.dictEditors[indexEditor]
-            if self.samePath(fichier, editor.getFileName()):
+            if self.samePath(fichier, editor.getDataSetFileName()):
                 msgBox = QMessageBox()
                 msgBox.setWindowTitle(tr("Fichier"))
                 msgBox.setText(tr("Le fichier <b>%s</b> est deja ouvert", str(fichier)))
@@ -400,7 +400,7 @@ class QtEditorManager(EditorManager):
                 double = editor
         else:
             from qt_editor import QtEditor
-            editor = QtEditor(self.appliEficas, fichier, jdc, self.myQtab, include)
+            editor = QtEditor(self.appliEficas, cataFile=None, fichier=fichier, jdc=jdc, QWParent=self.myQtab, include=include)
         if double != None: self.doubles[editor] = double
         if editor.jdc:  # le fichier est bien un jdc
              self.editors.append(editor)
@@ -455,7 +455,7 @@ class QtEditorManager(EditorManager):
                 return 1
             return 2
         if editor.modified:
-            fn = editor.getFileName()
+            fn = editor.getDataSetFileName()
             if fn is None:
                 fn = tr("Noname")
             msgBox = QMessageBox(None)
index da16ce0920d863ac692c06f204decb2476be91f6..edbf01437c84f9d4b76a9098f59a831c0a269665 100755 (executable)
@@ -43,7 +43,7 @@ class QtEficasAppli(EficasAppli, Ui_Eficas, QMainWindow):
     """
 
     #----------------------------------------------------------------------------------------------------------------------------------------------
-    def __init__(self, code=None, versionCode=None, salome=1, multi=False, langue="fr", ssCode=None, fichierCata=None, GUIPath="InterfaceGUI.QT5", appWeb = None):
+    def __init__(self, code=None, versionCode=None, salome=1, multi=False, langue="fr", ssCode=None, cataFile=None, GUIPath="InterfaceGUI.QT5", appWeb = None):
     #----------------------------------------------------------------------------------------------------------------------------------------------
         """
         Constructor
@@ -51,7 +51,7 @@ class QtEficasAppli(EficasAppli, Ui_Eficas, QMainWindow):
         QMainWindow.__init__(self)
         Ui_Eficas.__init__(self)
         self.setupUi(self)
-        EficasAppli.__init__( self, code, versionCode, salome, multi, langue,  ssCode, fichierCata, GUIPath, appWeb)
+        EficasAppli.__init__( self, code, versionCode, salome, multi, langue,  ssCode, cataFile, GUIPath, appWeb)
         
         self.editorManager = QtEditorManager(self)
 
diff --git a/InterfaceGUI/QT5/traiteSaisie.py b/InterfaceGUI/QT5/traiteSaisie.py
new file mode 100644 (file)
index 0000000..c2a93a1
--- /dev/null
@@ -0,0 +1,181 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2024   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
+#
+
+import types
+from Accas.extensions.eficas_translation import tr
+
+#--------------------------
+class SaisieValeur(object):
+#--------------------------
+    """
+    Classe contenant les methodes communes aux  panels
+    permettant de choisir des valeurs
+    """
+
+    def valeurChanged(self,valeur=None):
+    #-----------------------------------
+    # pour la partie Web
+        debug=0
+        if debug :  print('valeurChanged', valeur, type(valeur))
+        nouvelleValeurFormat=self.politique.getValeurTexte(nouvelleValeur)
+        validite,commentaire=self.politique.recordValeur(nouvelleValeurFormat)
+        if commentaire != "" :
+            if validite : self.editor.afficheCommentaire(commentaire)
+            else        : self.editor.afficheMessage(commentaire,'red')
+        self.inSaisieValeur=False
+        self.setValide()
+
+
+    def LEvaleurPressed(self, valeur=None):
+    #---------------------------------------
+    # pour la partie Qt
+        debug=0
+        if debug :  print('LEvaleurPressed', valeur, type(valeur))
+        if not hasattr(self, "inSaisieValeur"): self.inSaisieValeur = False
+        if self.inSaisieValeur: return
+        self.inSaisieValeur = True
+
+        if valeur == None:
+            try:
+                nouvelleValeur = str(self.lineEditVal.text())
+            except UnicodeEncodeError as e:
+                self.editor.afficheMessage("pb d encoding", Qt.red)
+                validite, commentaire = self.politique.recordValeur(None)
+                self.lineEditVal.setText("")
+                self.setValide()
+                self.inSaisieValeur = False
+                return
+        else:
+            try:
+                # la 1 ligne est tres bizarre. remplacee par le 3nd le 01 10 19
+                # if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
+                if hasattr(self, "lineEditVal"): self.lineEditVal.setText(tr(valeur))
+            except:
+                if hasattr(self, "lineEditVal"): self.lineEditVal.setText(valeur)
+            nouvelleValeur = valeur
+
+        if self.node.item.definition.validators != None:
+            if self.node.item.definition.validators.verifItem(nouvelleValeur) != 1:
+                commentaire = self.node.item.definition.validators.infoErreurItem()
+                self.editor.afficheMessage(commentaire, Qt.red)
+                self.inSaisieValeur = False
+                return
+
+        nouvelleValeurFormat = self.politique.getValeurTexte(nouvelleValeur)
+        validite, commentaire = self.politique.recordValeur(nouvelleValeurFormat)
+        if commentaire != "":
+            if validite: self.editor.afficheCommentaire(commentaire)
+            else: self.editor.afficheMessage(commentaire, 'red')
+        self.inSaisieValeur = False
+        self.setValide()
+
+    def TraiteLEValeur(self, valeurTraitee=None):
+    #---------------------------------------------
+        # pour Qt
+        # lit la chaine entree dans le lineedit
+        # et la tranforme en chaine de valeurs
+        # attention eventuellement aux complexes
+
+        listeValeurs = []
+        if valeurTraitee == None:
+            valeurBrute = str(self.LEValeur.text())
+        else:
+            valeurBrute = valeurTraitee
+        if valeurBrute == str(""): return listeValeurs, 1
+        return self.traiteValeurSaisie(valeurBrute)
+
+    def traiteValeurSaisie(self, valeurSaisie):
+    #---------------------------------------
+        # appelé directerment pour le web 
+        # ou pour QT via la fonction TraiteLEValeur 
+        listeValeurs = []
+        valeurBrute = valeurSaisie
+        try:    valeur = eval(valeurBrute, {})
+        except: valeur = valeurBrute
+
+        # pour traiter 11.0 - 30.0 pour le CIST
+        # if (valeurTraitee and (type(valeurTraitee) in types.StringTypes) and (self.node.item.waitTxm())) :
+        if (
+            valeurTraitee
+            and isinstance(valeurTraitee, str)
+            and (self.node.item.waitTxm())
+        ):
+            valeur = str(valeurTraitee)
+
+        if type(valeur) in (list, tuple):
+            if self.node.item.waitComplex():
+                indice = 0
+                while indice < len(valeur):
+                    v = valeur[indice]
+
+                    if v == "RI" or v == "MP":
+                        try:
+                            t = tuple([v, valeur[indice + 1], valeur[indice + 2]])
+                            listeValeurs.append(t)
+                            indice = indice + 3
+                        except:
+                            commentaire = tr(
+                                "Veuillez entrer le complexe sous forme aster ou sous forme python"
+                            )
+                            self.editor.afficheMessage(commentaire)
+                            return listeValeurs, 0
+
+                    else:  # ce n'est pas un tuple a la mode aster
+                        listeValeurs.append(v)
+                        indice = indice + 1
+
+            else:  # on n'attend pas un complexe
+                listeValeurs = valeurBrute.split(",")
+
+        elif type(valeur) == bytes:
+            listeValeurs = valeur.split(",")
+        else:
+            # listeValeurs.append(valeurBrute)
+            listeValeurs.append(valeur)
+
+        return listeValeurs, 1
+
+
+class SaisieSDCO(object):
+    def LESDCOReturnPressed(self):
+        """
+        Lit le nom donne par l'utilisateur au concept de type CO qui doit être
+        la valeur du MCS courant et stocke cette valeur
+        """
+        self.editor.initModif()
+        anc_val = self.node.item.getValeur()
+        if anc_val != None:
+            # il faut egalement propager la destruction de l'ancien concept
+            self.node.item.deleteValeurCo(valeur=anc_val)
+            # et on force le recalcul des concepts de sortie de l'etape
+            self.node.item.object.etape.getType_produit(force=1)
+            # et le recalcul du contexte
+            self.node.item.object.etape.parent.resetContext()
+        nomConcept = str(self.LESDCO.text())
+        if nomConcept == "":
+            return
+
+        test, commentaire = self.node.item.setValeurCo(nomConcept)
+        if test:
+            commentaire = tr("Valeur du mot-clef enregistree")
+            self.node.updateNodeValid()
+        else:
+            cr = self.node.item.getCr()
+            commentaire = tr("Valeur du mot-clef non autorisee :") + cr.getMessFatal()
diff --git a/InterfaceGUI/Web/.web_eficas.py.swp b/InterfaceGUI/Web/.web_eficas.py.swp
deleted file mode 100644 (file)
index 5fe9d4a..0000000
Binary files a/InterfaceGUI/Web/.web_eficas.py.swp and /dev/null differ
index 14a444f1ffadb40c913ac3e7d3a4c57127912e27..29c7aaea2b5412c0f5075c5229b5b08a0745dbd4 100644 (file)
@@ -43,7 +43,8 @@ class JDCTree():
         self.inhibeExpand  =  True
         self.childrenComplete=[]
         self.oldValidite='init'
-        self.editor.idUnique = self.tree.racine.item.idUnique
+        self.item.idUnique = self.tree.racine.item.idUnique
+        # Est-ce que l editeur a besoin de cet idUnique ?? a priori non 
         #print ('fin __init__ JDCTree')
 
     # def handleContextMenu(self,item,coord):
@@ -222,6 +223,7 @@ class JDCNode():
 
      
     def construitChildrenComplete(self):
+    #------------------------------------------
     # PN a tester avec des blocs de blocs
          from . import compobloc
          liste=[]
@@ -234,11 +236,9 @@ class JDCNode():
                 liste.append(itemFils)
          return liste
             
-
-
-    #-----------------------------------
+    #-------------------------
     def getDicoForFancy(self):
-    #-----------------------------------
+    #-------------------------
         return self.item.getDicoForFancy()
 
     #-----------------------------------
@@ -335,6 +335,7 @@ class JDCNode():
         self.oldStatut = statut 
         monDictPartiel={} 
         monDictPartiel['statut']=statut
+        #TODO remonter au pere si le statut change
         self.editor.connecteur.toWebApp('updateNodeInfo',self.getIdUnique(), monDictPartiel)
 
     def updateOptionnels(self):
@@ -342,87 +343,13 @@ class JDCNode():
         if self.item.nature == 'MCList' or self.item.nature == 'JDC' or self.item.nature=='MCSIMP' : return
         monDictPartiel={} 
         monDictPartiel['infoOptionnels'] = self.item.calculOptionnelInclutBlocs()
-        self.editor.connecteur.toWebApp('updateNodeInfo',self.getIdUnique(), monDictPartiel)
-
-    #def chercheNoeudCorrespondant(self,objSimp):
-    #-------------------------------------------
-    #    sublist = self.item._getSubList()
-    #    for node in self.childrenComplete:
-    #        if node.item.object==objSimp : return node
-    #    return None
-    #def afficheCeNiveau(self):
-    #-------------------------
-    #def affichePanneau(self) :
-    #-------------------------
-    #def createPopUpMenu(self):
-    #-------------------------
-    #def commentIt(self):
-    #-------------------------
-    #def unCommentIt(self):
-    #-------------------------
-    #def addComment( self, after=True ):
-    #-----------------------------------
-    #def addParameters( self, after=True ):
-    #-------------------------------------
-    #def select( self ):
-    #------------------
-    #------------------------------------------------------------------
-    # Methodes de creation et destruction de noeuds
-    #------------------------------------------------------------------
-    #def appendBrother(self,name,pos='after',plier=False):
-    #----------------------------------------------------
-    #def verifiePosition(self,name,pos,aLaRacine=False):
-    #----------------------------------------------------
-    #def deplace(self):
-    #-----------------
-    #def deleteMultiple(self,liste=()):
-    #--------------------------------
+        return monDictPartiel
 
-    #def updateNodeValid(self):
-    #-----------------------
-        
-    #def updateNodeLabelInBlack(self):
-    #-------------------------------
-    #def updateNodeLabelInBlue(self):
-    #-------------------------------
-    #def updatePlusieursNodeLabelInBlue(self,liste):
-    #----------------------------------------------
-    #def updateNodeTexteInBlack(self):
-    #--------------------------------
-    #def updateNodeTexte(self):
-    #----------------------------
-    #def updateNodeTexteInBlue(self):
-    #--------------------------------
-    #def updateNodes(self):
-    #--------------------------------
-    #def updateValid(self) :
+    def updateNodeInfo(self):
     #----------------------
-    #def updateTexte(self):
-    #----------------------
-    #def forceRecalculChildren(self,niveau):
-    #--------------------------------------
-    #def doPaste(self,node_selected,pos='after'):
-    #--------------------------------------------
-    #def doPasteCommande(self,objet_a_copier,pos='after'):
-    #-----------------------------------------------------
-    #def doPastePremier(self,objet_a_copier):
-    #---------------------------------------
-    #def plieToutEtReafficheSaufItem(self, itemADeplier):
-    #---------------------------------------------------
-    #def plieToutEtReaffiche(self):
-    #-----------------------------
-    #def deplieToutEtReaffiche(self):
-    #-----------------------------
-    #def setPlie(self):
-    #-----------------
-    #def setPlieChildren(self):
-    #-----------------------------
-    #def setDeplie(self):
-    #-----------------------------
-    #def setDeplieChildren(self):
-    #-----------------------------
-    #def selectAvant(self):
-    #-----------------------------
-    #def selectApres(self):
-    #---------------------
+        if self.item.nature == 'MCList' or self.item.nature == 'JDC' : print ('dans updateNodeInfo reflechir SVP')
+        monDico= self.item.getDicoForFancy()
+        return monDico
+
+
 
index 5eefd20d27da80bdf5d1b0ed58dccf53161639ce..3eb0c967064c90d8b7b41dee3ab492a002c6bade 100644 (file)
@@ -31,17 +31,17 @@ from InterfaceGUI.Common.simp_treeItem_commun import SIMPTreeItemCommun
 
 class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
 
-    def traiteValeurSaisie(self,valeur): 
+    def traiteValeurSaisie(self,  valeur): 
         if self.item.get_definition().max==1 : self.politique = PolitiqueUnique (self, self.editor)
         else  : self.politique = PolitiquePlusieurs(self, self.editor)
         if self.item.definition.validators != None :
             if self.item.definition.validators.verifItem(nouvelleValeur) !=1 :
                 commentaire=self.node.item.definition.validators.infoErreurItem()
-                return (self.item.idUnique, commentaire, false)
+                return (self.item.idUnique, 100 ,commentaire)
         nouvelleValeurFormat=self.politique.getValeurTexte(valeur)
         validite,commentaire=self.politique.recordValeur(nouvelleValeurFormat)
-        if validite : self.treeParent.updateOptionnels() 
-        return (self.item.idUnique, commentaire, validite)
+        #if validite : self.treeParent.updateOptionnels() 
+        return (self.item.idUnique, 0, 'commentaire')
         
 class SIMPTreeItem(SIMPTreeItemCommun):
     itemNode = Node
index 9ac4982b8dfdeeb82903c5cc38c4de2739e2f16d..35b62efabadcb8c7fa8eec58bd252e9bc79f72e3 100755 (executable)
@@ -46,13 +46,13 @@ class WebEditor(Editor):
        Editeur de jdc
     """
 
-    #--------------------------------------------------------------------------
-    def __init__ (self,appliEficas,fichier = None, jdc= None, session = None ):
-    #--------------------------------------------------------------------------
+    #---------------------------------------------------------------------------------------------
+    def __init__ (self,appliEficas,cataFile = None, dataSetFile = None, jdc = None, include = None ):
+    #-------------------------------------------------------------------------------------------
         
-        self.connecteur=appliEficas
+        self.editorManager=appliEficas.editorManager
         self.dicoIdNode={}
-        Editor.__init__(self,appliEficas,fichier)
+        Editor.__init__(self,appliEficas, cataFile, dataSetFile, jdc, include)
         comploader.chargerComposants('Web')
         self.tree=None
         if self.jdc:
@@ -96,20 +96,6 @@ class WebEditor(Editor):
         if self.tree == None : return {}
         return obj.getDicoForFancy()
 
-    #-------------------------------------
-    @fonctionLoguee
-    def afficheMessage(self,txt,couleur=None):
-    #---------------------------------------
-        self.connecteur.toWebApp('afficheMessage', txt, couleur) 
-        Editor.afficheMessage(self,'message to webapp',txt,couleur)
-
-    #-------------------------------------
-    @fonctionLoguee
-    def afficheAlerte(self,titre,message):
-    #-------------------------------------
-        self.connecteur.toWebApp('afficheAlerte', titre ,  message) 
-        Editor.afficheMessage(self,titre,message)
-
     #---------------------------
     @fonctionLoguee
     def getListeCommandes(self):
@@ -124,20 +110,34 @@ class WebEditor(Editor):
          if not monNode : return  (False, 'Node {} non trouve'.format(id))
          return monNode.fauxNoeudGraphique.updateSDName(sdnom)
 
-    #---------------------------------
-    @fonctionLoguee
-    def changeValeur(self,id,valeur) :
-    #---------------------------------
+    #-----------------------------------------
+    #@fonctionLoguee
+    def changeValeur(self,sId, nodeId, valeur) :
+    #-----------------------------------------
          """
          id : identifiant unique
          valeur : valeur saisie dans le formulaire
          doit-on mettre l ancienne valeur en retour qui serait utile si validité = Non
          """
-         monNode=self.getNodeById(id)
-         if not monNode : return  (id, False, 'Node {} non trouve'.format(id))
-         #print (' change Valeur', monNode)
-         #(idUnique, commentaire, validite)=monNode.fauxNoeudGraphique.traiteValeurSaisie(valeur)
-         #print ('retour ChangeValeur',idUnique, commentaire, validite )
-         # 
-         return monNode.fauxNoeudGraphique.traiteValeurSaisie(valeur)
-
+         debug = 1
+         if debug : print (' changeValeur sId, nodeId, valeur' ,sId, nodeId, valeur)
+         monNode=self.getNodeById(nodeId)
+         if debug : print ('monNode : ', monNode)
+         if not monNode : return  (nodeId, False, 'Node {} non trouve'.format(nodeId))
+         if debug : print (' change Valeur', monNode)
+         idRetour, commentaire, validite = monNode.fauxNoeudGraphique.traiteValeurSaisie(valeur)
+         if validite :
+             self.appliEficas.propageChange(sId, self.editorId, False, 'updateNodeInfo', nodeId, monNode.fauxNoeudGraphique.updateNodeInfo())
+# (self, emitSessionId, emitEditorID, toAll , 'updateNodeInfo', *args, **kwargs)
+             print ('if validite : self.treeParent.updateOptionnels')
+             return (idRetour, commentaire, validite)
+         if not validite :
+            return (idRetour, commentaire, validite)
+
+    #--------------------------------
+    def afficheMessage(self, texte):
+    #------------------------------------
+    # on ne fait rien
+    # contraitement a QT le commentaire est dans le retour de la fonction
+         debug = 0
+         if debug : print (texte)
diff --git a/InterfaceGUI/Web/web_editor_manager.py b/InterfaceGUI/Web/web_editor_manager.py
deleted file mode 100644 (file)
index 56f2694..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2024   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
-#
-
-import os
-from Accas.extensions.eficas_translation import tr
-from Editeur.editor_manager import EditorManager
-
-#-----------------------------------#
-class WebEditorManager(EditorManager):
-#-----------------------------------#
-    """
-    classe qui gere quel est l editor web actif
-    """
-
-    #--------------------------------
-    def __init__(self, appliEficas):
-    #--------------------------------
-        super().__init__(appliEficas)
-        self.dictEditors={}
-        self.dictSessions = {}
-
-
-    #---------------------------------------
-    def afficheInfos(self,txt,couleur=None):
-    #---------------------------------------
-        """
-          Est-ce que le web_manager a des infos a afficher ?
-          sans session ?
-        """
-        self.appliEficas.toWebApp('afficheInfos', txt, couleur) 
-
-
-    # ------------------------------------------------------
-    def getEditor(self, sId=None, cata=None, fichier=None
-    # ------------------------------------------------------
-        """
-          Retourne un nouvel editeur ou le meme si doublon
-          gere la liste des connexions pour propager les infos
-          il faut aussi la machine dont il provient
-        """
-        for indexEditor in self.dictEditors:
-            editor = self.dictEditors[indexEditor]
-            if self.samePath(cata, editor.getCataName()) and self.samePath(fichier, editor.getFileName()):
-                double = editor
-                break
-        else:
-            double = None
-            from web_editor import WebEditor
-            editor = WebEditor(self.appliEficas, fichier)
-            if editor.jdc:  # le fichier est bien un jdc
-                self.editors.append(editor)
-                self.dictEditors[editor.idUnique]=editor
-            else:
-                editor=None
-        # if double :
-        #    il faut mettre les sessions à jours
-        return editor
-
-
-    # --------------------------
-    def getEditorById(self, id):
-    # ---------------------------
-        if id in self.dictEditors:
-           return self.dictEditors[id]
-        return None
-        
-    # --------------------------
-    def getIdByEditor(self, editor):
-    # ---------------------------
-        for (id, valEditor) in self.dictEditors.items():
-            if editor == valEditor : return id
-        return None
-
diff --git a/InterfaceGUI/Web/web_eficas.py b/InterfaceGUI/Web/web_eficas.py
deleted file mode 100755 (executable)
index c79b6c1..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2024   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
-#
-import os, sys
-
-from Editeur.eficas_appli import EficasAppli
-from InterfaceGUI.Web.web_editor_manager import WebEditorManager
-from Accas.extensions.eficas_exception import EficasException
-
-activeLogging=0
-if activeLogging :
-   from Editeur.loggingEnvironnement import loggingEnvironnement, fonctionLoguee
-else :
-   fonctionLoguee = lambda func: func
-
-#--------------------------------#
-class WebEficasAppli(EficasAppli):
-#--------------------------------#
-    """
-    Class implementing the main QT user interface.
-    """
-
-    #---------------------------------------------------------------------------------------------------------------------------------------------------------
-    def __init__(self, code=None, versionCode=None, salome=0, multi=False, langue="fr", ssCode=None, fichierCata=None, GUIPath="InterfaceGUI.QT5", appWeb=None):
-    #---------------------------------------------------------------------------------------------------------------------------------------------------------
-        """
-        Constructor
-        """
-        EficasAppli.__init__( self, code, versionCode, salome, multi, langue,  ssCode, fichierCata, GUIPath, appWeb)
-        self.editorManager = WebEditorManager(self)
-        if self.appWeb == None : 
-           super().afficheMessage ('lancement Eficas WEB' , 'le parametre appWeb est obligatoire')
-           return 
-
-
-    #-----------------------------------------
-    def toWebApp(self,fction, sid, eid *args, **kwargs):
-    #-----------------------------------------
-        #if fction =='propageValide' :
-        debug=0
-        if debug  : print ('PNPNPN : WebEficasAppli.toWebApp',  fction, sid, eid, *args, **kwargs)
-        if self.appWeb == None  : return
-        #if fction =='propageValide' : print ('self.appWeb.toWebApp propageValide', self.monEditeur.getNodeById(args[0]).nom)
-        self.appWeb.fromConnecteur(fction, sid, eid, *args, **kwargs)
-
-    #-----------------------
-    def createEditor(self):
-    #-----------------------
-        monEditor = self.editorManager.getEditor(self)
-        return monEditor
-
-
-    @fonctionLoguee
-    #---------------------------
-    def openFile(self, fichier):
-    #---------------------------
-        try:
-            monEditor = self.editorManager.getEditor(fichier)
-        except EficasException as exc:
-            self.afficheMessage('erreur ouverture fichier', str(exc),critical=True)
-            monEditor = None
-        return monEditor
-
-    @fonctionLoguee
-    #-----------------------------------------------------
-    def afficheMessage (self, titre, texte,critical=True):
-    #-----------------------------------------------------
-#TODO : le afficheMessage doit tenir compte de qui
-        if critical : 
-           self.toWebApp('afficheMessage', titre+texte, 'rouge')
-        else :
-           self.toWebApp('afficheMessage', titre+texte)
-
-
-if __name__ == "__main__":
-    print ('todo')
index 98fc88e57bd0be00c826b304ad2fdbd5d064c7b8..14940888a764f853b55a3d2bcdc81da31dc87453 100644 (file)
@@ -41,7 +41,7 @@ class QtEditor(Ui_editor5C, Editor, QWidget):
        Editeur de jdc 5C
     """
 
-    def __init__ (self,appliEficas,fichier = None, jdc=None, QWParent=None, include=0):
+    def __init__ (self,appliEficas,cataFile = None, fichier = None, jdc=None, QWParent=None, include=0):
     #------------------------------------------------------------------------------------------------
 
         debug = 0
@@ -49,7 +49,7 @@ class QtEditor(Ui_editor5C, Editor, QWidget):
 
         QWidget.__init__(self,None)
         self.setupUi(self)
-        Editor.__init__(self,appliEficas, fichier, jdc=jdc)
+        Editor.__init__(self,appliEficas, cataFile=None, fichier=fichier, jdc=jdc, QWParent=QWParent, include=include) 
         comploader.chargerComposants(self.appliEficas.GUIPath)
         self.initQTSignals()
         self.inhibeSplitter=0
index b077b02a7d32efdce3098f79515f29a0b728404b..d06dafa20e2f9e4502b7afe6c9fc19ec874f80ea 100755 (executable)
@@ -1,6 +1,6 @@
 # coding: utf-8
 #!/usr/bin/env python3
-import sys
+import sys, os
 
 code='Essai'
 #code=None
@@ -41,6 +41,8 @@ app.config['SECRET_KEY']         = os.urandom(24)
 app.config['UPLOAD_FOLDER']      = 'data/'
 app.config['THUMBNAIL_FOLDER']   = 'data/thumbnail/'
 app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024
+#PNPN
+#app.config['SESSION_REFRESH_EACH_REQUEST'] = False
 ALLOWED_EXTENSIONS = set(['py','comm','txt', 'gif', 'png', 'jpg', 'jpeg', 'bmp', 'rar', 'zip', '7zip', 'doc', 'docx'])
 IGNORED_FILES = set(['.gitignore'])
 
@@ -57,21 +59,23 @@ def createWebAppli(app):
     import os
     sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..'))
     from Editeur.eficas_go import getEficas
-    eficasAppli=getEficas(code, langue='ang',GUIPath= 'Web',appWeb=app)
+    eficasAppli=getEficas(code, langue='ang',appWeb=app)
     return eficasAppli
 
 
 eficasAppli=createWebAppli(app)
 debug=1
-if debug : 
-    monEficasEditeur=eficasAppli.getEditor()
-    print ('les commandes dans le catalogue')
-    print ('_______________________________')
-    print (monEficasEditeur.getListeCommandes())
-
-def fromConnecteur(maFonction,*args,**kwargs):
+# Plus possible, il faut d autres parametres a getEditor
+# si on veut la liste des commandes il faut enrichir l API
+#if debug : 
+#    monEficasEditeur=eficasAppli.getEditor()
+#    print ('les commandes dans le catalogue')
+#    print ('_______________________________')
+#    print (monEficasEditeur.getListeCommandes())
+
+def fromConnecteur(maFonction, sessionId,*args,**kwargs):
   fnct=globals()[maFonction]
-  fnct(*args,**kwargs)
+  fnct(sessionId, *args,**kwargs)
 
 #TODO : Rattacher à une session
 #         gérer un appel register callback
@@ -84,30 +88,40 @@ app.fromConnecteur=fromConnecteur
 #    - ReAffichage d'un noeud (et ses enfants)
 #    - Changement d'un nom de mot-cle reference
 
-def propageValide(id, valid): #TODO: RENAME TO ... propagateValidation
+def propageValide(sId, id, valid): #TODO: RENAME TO ... propagateValidation
+    if sId != session['eficasSession']  : return
     print ('Flask/propageValide: ', id, valid)
     sse.publish( {'id':id, 'valid':valid, 'message': "Hello from propageValide!"}, type='propageValide')
 
-def updateNodeInfo(id, info):
+def updateNodeInfo(sId, id, info):
+    print ('Flask/updateNodeInfo', sId, id, info, session['eficasSession'])
+    print ('--------- sId',sId)
+    print ('--------- moimeme',session['eficasSession'])
+    print ('--------- monEditeur',session['eficasEditor'])
+    #if sId != session['eficasSession']  : return
     print ('Flask/updateNodeInfo: ', id, info)
     sse.publish( {'id':id, 'info':info, 'message': "Hello from updateNodeInfo!"}, type='updateNodeInfo')
 
-def appendChildren(id, fcyTreeJson, pos):
+def appendChildren(sId, id, fcyTreeJson, pos):
+    if sId != session['eficasSession']  : return
     print ('Flask/appendChildren: ', id, fcyTreeJson, pos)
     sse.publish( {'id':id, 'fcyTreeSrc':fcyTreeJson, 'pos':pos, 'message': "Hello from appendChildren!"}, type='appendChildren')
 
-def deleteChildren(idList):
+def deleteChildren(sId, idList):
+    if sId != session['eficasSession']  : return
     #print ('Flask/deleteChildren: ', idList)
     sse.publish( {'idList':idList,'message': "Hello from deleteChildren!"}, type='deleteChildren')
 
 #TODO: Câbler la sélection du catalogue avant d'activer les appels suivants
 #      car si la page Web n'est pas rendue et que le connecteur génère une erreur... boom !
-def afficheMessage(txt, couleur):                     #TODO: RENAME TO ... displayWarning
+def afficheMessage(sId, txt, couleur):                     #TODO: RENAME TO ... displayWarning
+    if sId != session['eficasSession']  : return
     print ('Flask/afficheMessage: ', txt, couleur)
     # sse.publish( {'txt':txt, 'color':couleur, 'messageClass':"alert-warning" ,'message': "Hello from afficheMessage!"},
     #              type='displayMessage')
 
-def afficheAlerte(titre, message):                  #TODO: RENAME TO ... displayDanger
+def afficheAlerte(sId, titre, message):                  #TODO: RENAME TO ... displayDanger
+    if sId != session['eficasSession']  : return
     print ('Flask/afficheAlerte: ', titre, message) #TODO: titre & message VS txt ?
     # sse.publish( {'txt':titre, 'color':couleur, 'messageClass':"alert-danger", 'message': "Hello from afficheAlerte!"},
     #              type='displayMessage')
@@ -132,14 +146,19 @@ def updateSimp():
         id=req['id'];value=req['value']
         # id, value = req.values()       # Dangereux correspondance implicite
         value             = str(value)   #On peut écrire Pi
-        eficasEditeur=eficasAppli.getEditorById(session['eficasEditeur'])
-        rId,message,changeDone       = eficasEditeur.changeValeur(id,value);
+
+        (eficasEditor, code, message) =eficasAppli.getEditorById(session['eficasEditor'])
+        #eficasEditor=eficasAppli.getEditorById(session['eficasEditor'])
+        sId = session['eficasSession'] 
+        print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu', sId)
+
+        (rId,message,changeDone) = eficasEditor.changeValeur(sId, id,value);
         assert(rId==id)
         #changeDone        = True
         print ("changeDone : ",changeDone)
         # Ne pas recuperer et ne pas renvoyer le noeud dans le cas du SIMP
         #  (le changeDone et l''ancienne valeur ds la WebApp suffit 
-        node              = eficasEditeur.getDicoForFancy(eficasEditeur.getNodeById(id))
+        node              = eficasEditor.getDicoForFancy(eficasEditor.getNodeById(id))
         print("Flask/updateSimp node : ",node)
         # return jsonify([myTreeDico])
         
@@ -160,8 +179,8 @@ def updateSDName():
         # Print the dictionary
         id=req['id'];sdnom=req['sdnom']
         sdnom              = str(sdnom)   #On peut écrire Pi
-        eficasEditeur=eficasAppli.getEditorById(session['eficasEditeur'])
-        changeDone,message = eficasEditeur.updateSDName(id,sdnom);
+        eficasEditor=eficasAppli.getEditorById(session['eficasEditor'])
+        changeDone,message = eficasEditor.updateSDName(id,sdnom);
         #changeDone        = True
         print ("changeDone : ",changeDone)
         
@@ -184,8 +203,8 @@ def removeNode():
         # Print the dictionary
         print("/removeNode ",req);print("/removeNode ",req['id']);
         id  = req['id'];
-        eficasEditeur=eficasAppli.getEditorById(session['eficasEditeur'])
-        ret,message = eficasEditeur.suppNode(id);
+        eficasEditor=eficasAppli.getEditorById(session['eficasEditor'])
+        ret,message = eficasEditor.suppNode(id);
         print ("/removeNode : ret : ",ret," message : ",message)
         
         return make_response(json.dumps( {'ret':ret, 'message':message} ))
@@ -204,8 +223,8 @@ def appendChild():
         print(__file__+"/appendChild : ",req);
         id=req['id'];name=req['name'];pos=req['pos'];
         # id, value = req.values() # Dangereux correspondance implicite
-        #rId,message,changeDone  = eficasEditeur.appendChild(id,name,pos);
-        newId                    = eficasEditeur.appendChild(id,name,pos);
+        #rId,message,changeDone  = eficasEditor.appendChild(id,name,pos);
+        newId                    = eficasEditor.appendChild(id,name,pos);
         print (__file__+"/appendChild : newId : ",newId);
         
         return make_response(json.dumps( {'id':newId} ))
@@ -219,27 +238,59 @@ def appendChild():
 
 @app.route('/')
 def index():
-
-#PN decider de ce qu on appelle
-# Lecture du cata
-# Lecture du fichier
-    #eficasEditeur = eficasAppli.litFichierComm('../Codes/WebTest/web_tres_simple_avec_2Fact.comm')
-    #eficasAppli.litFichierComm('../WebTest/edg_REP1300_FULL_PN.comm')
-
-    eficasEditeur = eficasAppli.openFile('../Codes/WebTest/web_tres_simple_avec_2Fact.comm')
-    print ('_____________________________________')
-    print (eficasAppli)
-    print ('dans index : eficasEditeur', eficasEditeur)
-    if not(eficasEditeur)  :
+    print ('_______________________________________________')
+    print (session)
+    print ('_______________________________________________')
+    (eficasSession, codeErreur, message) =eficasAppli.getSessionId()
+    debug=1
+    if not codeErreur :
+        session['eficasSession'] = eficasSession
+        if debug : print (' enrolement de session : ', eficasSession)
+    else :
+        afficheMessage(message, 'red')
+        if not(eficasEditor)  :
+            return render_template('commandes_2.html',
+                titre='Pb a l enrolement ',
+                listeCommandes = [],
+                 tree= None
+            )
+    cataFile = os.path.abspath('../Codes/WebTest/cata_essai.py')
+    dataSetFile = os.path.abspath('../Codes/WebTest/web_tres_simple_avec_2Fact.comm')
+    if eficasSession == 3:
+        dataSetFile = os.path.abspath('../Codes/WebTest/web_tres_simple_incomplet.comm')
+    (eficasEditor, codeErreur, message) = eficasAppli.getWebEditor(eficasSession, cataFile, dataSetFile)
+    # TODO : separer les erreurs ouverture cata / ouvertur fichier
+    if debug : print ('dans index : eficasEditor : ', eficasEditor, ' code Erreur : ', codeErreur,'message : ', message)
+    if not codeErreur :
+        session['eficasEditor']=eficasEditor.getEditorId()
+    else :
+        afficheMessage(message, 'red')
+        if not(eficasEditor)  :
+            return render_template('commandes_2.html',
+                titre='Pb a l enrolement ',
+                listeCommandes = [],
+                 tree= None
+            )
+
+    if not(eficasEditor)  :
        return render_template('commandes_2.html',
           titre='Pb a la lecture',
           listeCommandes = [],
           tree= None
     )
-    #myFancyTreeDico=session['eficasEditeur'].getDicoForFancy(session['eficasEditeur'].tree.racine)
-    session['eficasEditeur']=eficasEditeur.idUnique
-    eficasEditeur=eficasAppli.getEditorById(session['eficasEditeur'])
-    myFancyTreeDico=eficasEditeur.getDicoForFancy(eficasEditeur.tree.racine)
+    (eficasEditor, code, message) =eficasAppli.getEditorById(session['eficasEditor'])
+    if codeErreur :
+        afficheMessage(message, 'red')
+        if not(eficasEditor)  :
+            return render_template('commandes_2.html',
+                titre='Pb a l ouverture du dataSet ',
+                listeCommandes = [],
+                 tree= None
+            )
+    if debug :   print ('idEditor = ', session['eficasEditor'])
+    if debug :   print ('eficasEditor  : ',eficasEditor)
+    
+    myFancyTreeDico=eficasEditor.getDicoForFancy(eficasEditor.tree.racine)
     myFancyTreeJS=json.dumps([myFancyTreeDico],indent=4)  #TODO : remove indent if not DEBUG
     
     #print("---- myFancyTreeDico ----")
@@ -249,12 +300,32 @@ def index():
 
     return render_template('commandes_2.html',
       titre=code,
-      listeCommandes = eficasEditeur.getListeCommandes(),
+      listeCommandes = eficasEditor.getListeCommandes(),
       tree=myFancyTreeJS,
       # tree=tree4Fancy,
     )
     # etape  = str(escape(request.args.get("etape", "")))
 
+@app.route('/get_eficasSession')
+def get_eficasSession():
+    if 'eficasSession' in session : print ( session['eficasSession'])
+    else : print ('pas de eficasSession')
+    return render_template('commandes_2.html',
+      titre=session['eficasSession'],
+      listeCommandes =  [],
+      tree=None,
+    )
+
+@app.route('/get_eficasEditor')
+def get_eficasEditor():
+    if 'eficasEditor' in session : print ( session['eficasEditor'])
+    else : print ('pas de eficasEditor')
+    return render_template('commandes_2.html',
+      titre=session['eficasEditor'],
+      listeCommandes =  [],
+      tree=None,
+    )
+
 
 #TODO: 
 #from fileManagement import *