]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
gros merge avec les patchs de la 8.5 et les avancees de mdm
authorpascale.noyret <pascale.noyret@edf.fr>
Mon, 10 Sep 2018 15:47:22 +0000 (17:47 +0200)
committerpascale.noyret <pascale.noyret@edf.fr>
Mon, 10 Sep 2018 15:47:22 +0000 (17:47 +0200)
43 files changed:
Accas/A_ETAPE.py
Accas/A_MCBLOC.py
Accas/A_MCFACT.py
Accas/A_MCSIMP.py
Efi2Xsd/AccasXsd.py
Efi2Xsd/MCAccasXsd.py
Ihm/I_JDC.py
Ihm/I_MACRO_ETAPE.py
Ihm/I_MCCOMPO.py
Ihm/I_MCFACT.py
Ihm/I_MCLIST.py
Ihm/I_MCSIMP.py
InterfaceQT4/configuration.py
InterfaceQT4/editor.py
InterfaceQT4/editorSsIhm.py
InterfaceQT4/gereIcones.py
InterfaceQT4/groupe.py
InterfaceQT4/monGroupeOptionnel.py
InterfaceQT4/monLayoutBouton.py
InterfaceQT4/monWidgetFact.py
InterfaceQT4/monWidgetOptionnel.py
InterfaceQT4/monWidgetPlusieursInto.py
InterfaceQT4/monWidgetPlusieursTuple.py
InterfaceQT4/monWidgetRadioButton.py
InterfaceQT4/qtEficas.py
InterfaceQT4/qtSaisie.py
InterfaceQT4/readercata.py
InterfaceQT4/readercataXML.py
InterfaceQT4/typeNode.py
InterfaceQT4/viewManager.py
Noyau/N_BLOC.py
Noyau/N_ETAPE.py
Noyau/N_FACT.py
Noyau/N_JDC.py
Noyau/N_JDC_CATA.py
Noyau/N_MCBLOC.py
Noyau/N_MCCOMPO.py
Noyau/N_MCFACT.py
Noyau/N_MCLIST.py
Noyau/N_MCSIMP.py
Noyau/N_OPER.py
Noyau/N_SIMP.py
UiQT5/desWidgetFact.ui

index 4c72b8120fc4ba9f77ce812bcaac33167bb52b70..a3dbd595012dee672488731dc876c4b558bbfe24 100644 (file)
@@ -25,6 +25,6 @@ from Efi2Xsd.MCAccasXsd  import X_MCCOMPO
 
 class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,X_MCCOMPO,N_ETAPE.ETAPE):
    def __init__(self,oper=None,reuse=None,args={}):
-      #print ('ETAPE accas', oper.nom)
+      print ('------------- ETAPE accas', oper.nom, args)
       N_ETAPE.ETAPE.__init__(self,oper,reuse,args)
       V_ETAPE.ETAPE.__init__(self)
index d6d1bcb53c3e3bce7e95a027e2d762196b8e33e7..df125d12fa0cfc2d981c8aa823f0fa743fa08704 100644 (file)
@@ -21,10 +21,10 @@ from __future__ import absolute_import
 from Noyau import N_MCBLOC
 from Validation import V_MCBLOC
 from Ihm import I_MCBLOC
-from Efi2Xsd.MCAccasXsd  import X_MCCOMPO
+from Efi2Xsd.MCAccasXsd  import X_MCBLOC
 
 
-class MCBLOC(I_MCBLOC.MCBLOC,N_MCBLOC.MCBLOC,X_MCCOMPO,V_MCBLOC.MCBLOC):
-   def __init__(self,val,definition,nom,parent):
-      N_MCBLOC.MCBLOC.__init__(self,val,definition,nom,parent)
+class MCBLOC(I_MCBLOC.MCBLOC,N_MCBLOC.MCBLOC,X_MCBLOC,V_MCBLOC.MCBLOC):
+   def __init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=None):
+      N_MCBLOC.MCBLOC.__init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
       V_MCBLOC.MCBLOC.__init__(self)
index 31fe0a4e128d161fa0e8b861a91ee0407ddeca75..50fd1a8da1d801faa27ba0ccd221aa123b9c9bda 100644 (file)
@@ -24,6 +24,6 @@ from Ihm import I_MCFACT
 from Efi2Xsd.MCAccasXsd  import X_MCFACT
 
 class MCFACT(I_MCFACT.MCFACT,N_MCFACT.MCFACT,X_MCFACT,V_MCFACT.MCFACT):
-   def __init__(self,val,definition,nom,parent):
-      N_MCFACT.MCFACT.__init__(self,val,definition,nom,parent)
+   def __init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=None):
+      N_MCFACT.MCFACT.__init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
       V_MCFACT.MCFACT.__init__(self)
index c3920907a61363839fa345855ca7debb11143c2f..a3c63cb607c053260164227daaf4060dee33ba23 100644 (file)
@@ -24,6 +24,7 @@ from Ihm import I_MCSIMP
 from Efi2Xsd.MCAccasXsd  import X_MCSIMP
 
 class MCSIMP(I_MCSIMP.MCSIMP,N_MCSIMP.MCSIMP,X_MCSIMP,V_MCSIMP.MCSIMP):
-   def __init__(self,val,definition,nom,parent):
-      N_MCSIMP.MCSIMP.__init__(self,val,definition,nom,parent)
+   def __init__(self,val,definition,nom,parent,objPyxbDeConstruction=None):
+   #def __init__(self,val,definition,nom,parent,objPyxbDeConstruction) quand cela sera correct dans les update_etape. pour l instant on laisse le defaut a None : 9 Aout 18:
+      N_MCSIMP.MCSIMP.__init__(self,val,definition,nom,parent,objPyxbDeConstruction)
       V_MCSIMP.MCSIMP.__init__(self)
index e61df38fc9ba586f84cad0c28bd12dc1f9c1c509..4483ad4172d33b218fa4178bcd0d4af84a64e866 100755 (executable)
@@ -18,6 +18,7 @@ from mapDesTypes import dictBLOCEficasXML, dictBLOCXMLEficas
 from mapDesTypes import dictPourCast, dictNomsDesTypes
 from mapDesTypes import listeParamDeTypeTypeAttendu, listeParamDeTypeStr, dictPourCast
 from mapDesTypes import listeParamTjsSequence, listeParamSelonType
+from mapDesTypes import Tuple
 
 
 from balises import *
@@ -223,6 +224,8 @@ class X_SIMP (X_definition):
        # il faut traduire le min et le max
        # il faut ajouter les regles
        # il faut gerer les types tuple et fichier
+
+       if hasattr(self.type[0], 'label') and self.type[0].label == "Tuple"  : return ('XXXXXXXX')
        return dictNomsDesTypes[self.type[0]]
   
    def traduitValMinValMax(self):
index 03ee55ebd7f3ed48514c17a3f06c1e8c11a405f9..83a31a744d7d807911e05582ff0b9e42859475d9 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 import sys,os
+import traceback
 #import raw.efficas as efficas
 import types
 
@@ -21,22 +22,31 @@ class X_MCSIMP:
       # self.valeur tient compte de la valeur par defaut
       # utiliser getValeur ? expression numpy
       if not self.cata.modeleMetier : return
-      if CONTEXT.fromXML : return
       #print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
-      self.monNomClasseModeleMetier='T_'+self.nom
-      self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
-      #print (self.maClasseModeleMetier)
-      print (self.valeur)
-      print (type(self.valeur))
-      if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur)
-      elif self.definition.into != None and 'TXM' in self.definition.type  : self.objPyxb = None
-      else                   : self.objPyxb=self.maClasseModeleMetier()
+      #if self.nom == 'diameter' : 
+      #    traceback.print_stack()
+      #    print ('****************************************************')
+      # print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
+      #if self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
+      if self.objPyxbDeConstruction != None :
+        self.objPyxb = self.objPyxbDeConstruction
+        self.objPyxbDeConstruction = None
+      else :
+        self.monNomClasseModeleMetier='T_'+self.nom
+        self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+        #print (self.maClasseModeleMetier)
+        #print (self.valeur)
+        #print (type(self.valeur))
+        if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur)
+        elif self.definition.into != None and 'TXM' in self.definition.type  : self.objPyxb = None
+        else                   : self.objPyxb=self.maClasseModeleMetier(); 
       self.filsPyxb=None
+      #print ('X_MCSIMP', self.nom, self.objPyxb)
       #print ('fin X_MCSIMP', self.objPyxb, self.nom,self)
 
 
    def setValeurObjPyxb(self,newVal):
-       print ('dans setValeurObjPyxb')
+       #print ('dans setValeurObjPyxb')
        if not self.cata.modeleMetier : return
        try : 
          print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom)
@@ -47,7 +57,7 @@ class X_MCSIMP:
        else              : nvlObj=self.maClasseModeleMetier()
        self.val=newVal
        indexOC=0
-       print ('avant',self.nom, self.perePyxb.objPyxb.orderedContent())
+       #print ('avant',self.nom, self.perePyxb.objPyxb.orderedContent())
        for i in self.perePyxb.objPyxb.orderedContent(): 
            if id(i._Content__value) == id(self.objPyxb) : break
            indexOC +=1
@@ -94,7 +104,7 @@ class X_MCSIMP:
        #print (monBinding)
         
    def deletePyxbObject(self):
-      print ('je passe par la', self, self.nom)
+      print ('je passe ds deletePyxbObject pour ', self, self.nom)
       
 
 class X_MCCOMPO:
@@ -102,63 +112,76 @@ class X_MCCOMPO:
 # 
    def buildObjPyxb(self,mc_list) :
       if not self.cata.modeleMetier : return
-      if CONTEXT.fromXML : return
-      print ('_______________________________________')
-      print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list)
-      self.monNomClasseModeleMetier='T_'+self.nom
-      self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
-      listArg=[]
+      #print ('________________________________________________')
+      #print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list)
+
+      self.listArg=[]
       for objAccas in mc_list :
-         # on remonte les mots-clefs des blocs
-        #print (type (objAccas))
         if objAccas.nature == 'MCBLOC' :
-           # Attention --> mc_list et mc_liste 
-           for fils in objAccas.mc_liste:
-               fils.perePyxb=self
-               listArg.append(fils.objPyxb)
-               print (fils.nom ,' a pour pere Pyxb', self, self.nom)
+           self.exploreBLOC(objAccas)
         elif objAccas.nature == 'MCList' :
            for fils in objAccas : 
                fils.perePyxb=self
-               listArg.append(fils.objPyxb)
+               self.listArg.append(fils.objPyxb)
         else :
-           listArg.append(objAccas.objPyxb)
+           self.listArg.append(objAccas.objPyxb)
            objAccas.perePyxb=self
            #print (objAccas.nom ,' a pour pere Pyxb', self, self.nom)
-         #print ( objAccas.nom, ' a pour perepyxb ' , objAccas.perePyxb.nom) 
-      self.objPyxb=self.maClasseModeleMetier(*listArg)
-      print ('Fin ', self.nom, self.objPyxb)
-      print ('_______________________________________')
+
+      self.monNomClasseModeleMetier='T_'+self.nom
+      self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+      if self.objPyxbDeConstruction != None :
+        self.objPyxb = self.objPyxbDeConstruction
+        self.objPyxbDeConstruction = None
+        #print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
+      else :
+        self.objPyxb=self.maClasseModeleMetier(*self.listArg)
+      #print ('Fin __________ ', self.nom, self.objPyxb)
+      #print ('X_MCCOMPO', self.nom, self.objPyxb)
+      #print ('_______________________________________')
 
    def deletePyxbObject(self):
       print ('******************************************')
-      print ('je passe par la', self, self.nom)
+      print ('je passe ds deletePyxbObject pour ', self, self.nom)
       print (self.perePyxb)
       print (dir(self)) 
       print ('******************************************')
 
-
+   def exploreBLOC(self,objAccas):
+      laListeSsLesBlocs=[]
+      for fils in objAccas.mc_liste:
+        if fils.nature == 'MCBLOC' :
+           self.exploreBLOC(fils)
+        elif fils.nature == 'MCList' :
+           for objFils in fils : 
+               fils.perePyxb=self
+               self.listArg.append(fils.objPyxb)
+               #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
+        else :
+           self.listArg.append(fils.objPyxb)
+           fils.perePyxb=self
+           #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
           
+   
 
   
 class X_MCBLOC (X_MCCOMPO):
 # --------------------------
    def buildObjPyxb(self,mc_list):
-      if CONTEXT.fromXML : return
       if not self.cata.modeleMetier : return
       # mise a none ? le bloc n a pas d existence en pyxb
       self.perePyxb=None
-      print ('_______________________________________')
-      print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list)
+      #print ('_______________________________________')
+      #print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list)
       # on rattache ses fils au bloc mais leur pere sera ensuite le MCCOMPO qui contient le bloc 
       # Pas sur d en avoir besoin
       self.filsPyxb=[]
       self.objPyxb=None
       for objAccas in mc_list :
          self.filsPyxb.append(objAccas.objPyxb)
-      print (self.filsPyxb)
-      print ('Fin ', self.nom, self.objPyxb)
-      print ('_______________________________________')
+      #print (self.filsPyxb)
+      #print ('Fin ', self.nom, self.objPyxb)
+      #print ('_______________________________________')
 
         
        
@@ -167,14 +190,14 @@ class X_MCLIST (X_MCCOMPO):
 # --------------------------
  
    def buildObjPyxb(self,mc_list):
-      print ('_______________________________________')
-      print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self)
-      print ('on ne fait rien')
-      print ('_______________________________________')
+      #print ('__________________________________________________________________')
+      #print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self)
+      #print ('on ne fait rien pour les MCLISTs, cela sera fait dans chaque MCFACT')
+      #print ('__________________________________________________________________')
       pass
 
+   # detruire la methode suivante
    #def build2ObjPyxb(self,mc_list):
-   #   if CONTEXT.fromXML : return
    #   print ('_______________________________________')
    #   print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self)
    #   if not self.cata.modeleMetier : return
@@ -187,7 +210,7 @@ class X_MCLIST (X_MCCOMPO):
              #print (type (objAccas))
              #print (objAccas.nom, objAccas.objPyxb, type(objAccas.objPyxb))
             #print ( type (objAccas.objPyxb) == list )
-            if type (objAccas.objPyxb) == list :
+            #if type (objAccas.objPyxb) == list :
                 #print ('ds le if')
    #             for fils in objAccas.objPyxb : 
    #                listArg.append(fils.objPyxb)
@@ -208,14 +231,9 @@ class X_MCLIST (X_MCCOMPO):
 
 class X_MCFACT (X_MCCOMPO):
 # -------------------------
-# on gere au niveau du MCLIST
+# on gere  au niveau du MCCOMPO
       pass
 
-   #def build2ObjPyxb(self,mc_list):
-   #   print ('_______________________________________')
-   #   print ('X_MCFACT buildObjPyxb debut et fin', self.nom, self)
-   #   print ('_______________________________________')
-  
 
 class X_JDC (X_MCCOMPO):
 # ---------------------
@@ -230,78 +248,104 @@ class X_JDC (X_MCCOMPO):
       pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.ALWAYS)
       pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
       pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
-
+      #print ('fin buildObjPyxb _______________________________________')
 
    def enregistreEtapePyxb(self,etape):
      # OK seulement si sequence (choice ? ...)
-      print ('ds enregistreEtapePyxb', etape.nom)
       if not self.cata.modeleMetier : return
-      #if self.source== "xml" : return
+      print ('enregistreEtapePyxb' , etape)
       self.objPyxb.append(etape.objPyxb)
       etape.perePyxb = self
       #self.toXml()
 
    def toXml(self):
-      #if not self.cata.modeleMetier : return
+      if not self.cata.modeleMetier : return
+      print ('***************',self.objPyxb,'***************',)
+      print ('***************',self.objPyxb.orderedContent(),'***************',)
       print(self.objPyxb.toDOM().toprettyxml())
       print(self.objPyxb.toxml())
+      return (self.objPyxb.toDOM().toprettyxml())
         
 
    def analyseFromXML(self):
-      print ("je suis la")
+      print ("je suis ds analyseFromXML -- > appel ds analyse de I_JDC.py")
       if self.procedure == "" : return
-      self.source='xml'
       self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
       for objEtape in self.objPyxb.content():
-          print ('analyse de ', objEtape)
           objEtape.dictArgs= (self.pyxbToDict(objEtape))
           objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
-          print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
-          print (objEtape._ExpandedName, type(objEtape._ExpandedName))
           objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
-          #print (objEtape)
-          #print (objEtape.monNomClasseAccas)
+          objEtape.dictPyxb['objEnPyxb']=objEtape
+          objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
           maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
+          objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
+          # attention objAccasEtape = None normal (cf buildSd)
  
-          print ( '________________')
+          print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
           print (objEtape , type(objEtape))
-          #print (dir(objEtape))
-          print (objEtape.dictArgs)
-          print ( '________________')
-          objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
-      self.source='None'
+          print (objEtape.dictPyxb)
+          print (maClasseAccas)
+          print (objAccasEtape)
+          #print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
+          #print (objEtape._ExpandedName, type(objEtape._ExpandedName))
+          #print (objEtape.dictPyxb[u'experience'])
+          #print (objEtape.dictArgs)
+          #print (objEtape.dictPyxb)
+          print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+          #exit()
+      
 
    def pyxbToDict(self,objAAnalyser):
-    # la transformation de l objAAnalyser ne fonctionne pas pour tout
+    # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
     # faudrait - il travailler sur les types des objets ?
     # c est a revoir -> fonction cast a prevoir ds les 2 sens
     if objAAnalyser is None: return
+    #print ('debut pour ',objAAnalyser)
     dictArgs = {}
     if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition): 
-       if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin):   return str(objAAnalyser)
-       if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser,)
-       if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser,)
-       if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser,)
-       if isinstance(objAAnalyser, (types.NoneType, types.BooleanType, types.FloatType, types.IntType, types.LongType)):
-        return repr(objAAnalyser)
+       objAAnalyser.dictPyxb=objAAnalyser
+       #print (objAAnalyser.dictPyxb , type(objAAnalyser.dictPyxb))
+       if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin):    return str(objAAnalyser)
+       if isinstance(objAAnalyser, types.StringTypes):  return str(objAAnalyser)
+       if isinstance(objAAnalyser, types.FloatType):  return float(objAAnalyser)
+       if isinstance(objAAnalyser, (types.IntType, types.LongType)):  return int(objAAnalyser)
+       #if isinstance(objAAnalyser, (types.NoneType, types.BooleanType, types.FloatType, types.IntType, types.LongType)):
+       return repr(objAAnalyser)
+       # ou ? return objAAnalyser
        #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
        #pour une enum getattr(value dans le type)
        # return pythonLiteral(ReferenceFacet(facet=value, **kw))
-       return objAAnalyser
+    objAAnalyser.dictPyxb = {} 
     for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
         objPyxbName  = expandedName.localName()
         objPyxbValue = getattr(objAAnalyser, objPyxbName)
         if objPyxbValue == None or objPyxbValue == [] : continue
         if elementDeclaration.isPlural():
             dictArgs[objPyxbName] = []
-            for objPyxb in objPyxbValue : dictArgs[objPyxbName].append(self.pyxbToDict(objPyxb))
+            #objAAnalyser.dictPyxb[objPyxbName]={} 
+            objAAnalyser.dictPyxb[objPyxbName]=[] 
+            #objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
+            for objPyxb in objPyxbValue : 
+                #print ('-------------',objPyxb)
+                dictArgs[objPyxbName].append(self.pyxbToDict(objPyxb))
+                objPyxb.dictPyxb['objEnPyxb'] = objPyxb
+                objAAnalyser.dictPyxb[objPyxbName].append(objPyxb.dictPyxb)
         else:
             dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
-    print ("***********************************")
-    print ('pyxbToDict ', objAAnalyser)
-    print (dictArgs)
+            #print ('ajout ds dico de ', objAAnalyser , 'de',  objPyxbName, objPyxbValue)
+            objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
+            #print ('ajout ds dico de ', objPyxbValue.dictPyxb, 'de',  objPyxbName)
+            objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
+    #print ("***********************************")
+    #print ('pyxbToDict  fin pour ********** ', objAAnalyser)
+    #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
+    #print ('pyxbToDict  fin pour ********** ', objAAnalyser)
+    #print ("***********************************")
+    #print (dictArgs)
+    #print (dictPyxb)
     #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
-    print ("***********************************")
+    #print ('fin pour ',objAAnalyser)
     return dictArgs
 
    
index a8aaebc12f6b7120c3be540b7f8362ff08e8eb40..995895682d1419a349806e9cb44ba5ce860d8995 100644 (file)
@@ -423,21 +423,21 @@ class JDC(I_OBJECT.OBJECT):
           comprises entre le premier DEBUT/POURSUITE et le premier FIN 
           et rendre actives les autres
       """
-      if self.definition.code == 'ASTER' :
+      #if self.definition.code == 'ASTER' :
          # Seulement pour ASTER :
          # Avant DEBUT actif vaut 0
          # Apres DEBUT et avant le 1er FIN actif vaut 1
          # Apres le 1er FIN actif vaut -1
-         actif=0
-      else:
-         actif=1
+      #   actif=0
+      #actif=1
       for etape in self.etapes:
-        if actif == 0 and etape.nom in ['DEBUT','POURSUITE']:actif=1
-        if actif == 1:
+        #if actif == 0 and etape.nom in ['DEBUT','POURSUITE']:actif=1
+        #if actif == 1:
            etape.active()
-        else:
-           etape.inactive()
-        if etape.nom == 'FIN':actif=-1
+           self.enregistreEtapePyxb(etape)
+        #else:
+        #   etape.inactive()
+        #if etape.nom == 'FIN':actif=-1
 
    def deplaceEntite(self,indexNoeudACopier,indexNoeudOuColler,pos):
       """
@@ -478,6 +478,7 @@ class JDC(I_OBJECT.OBJECT):
       self.initModif()
       index_etape=self.etapes.index(etape)
 
+      etape.deletePyxbObject()
       self.etapes.remove(etape)
 
       if etape.niveau is not self:
@@ -542,10 +543,17 @@ class JDC(I_OBJECT.OBJECT):
           e.updateContext(context)
 
    def analyse(self):
-      self.compile()
-      if not self.cr.estvide():return
-      self.execCompile()
-      self.activeEtapes()
+      if self.editor.format == 'xml' :
+         # il ne faut pas le faire quand le jeu de donnees est vide
+         self.setCurrentContext()
+         self.analyseFromXML()
+         #print ('stop demande'); exit()
+         #self.execCompileFromXML()
+      else :    
+         self.compile()
+         self.execCompile()
+         if not self.cr.estvide():return
+         self.activeEtapes()
 
    def registerParametre(self,param):
       """
index c3ea63d17148090fab365d589c6bc7288962939a..0de991d84b1c09f00783e4d9730a36d340e6a7ab 100644 (file)
@@ -163,8 +163,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
        # Erreurs dans l'INCLUDE. On garde la memoire du fichier 
        # mais on n'insere pas les concepts
        # On retablit l'etape courante step
-       print (j.cr)
-       print ("valid ",j.isValid())
+       #print (j.cr)
+       #print ("valid ",j.isValid())
        CONTEXT.unsetCurrentStep()
        CONTEXT.setCurrentStep(step)
        raise EficasException(tr("Impossible de relire le fichier %s \n ")+ six.text_type(j.cr))
@@ -174,7 +174,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
        # L'INCLUDE n'est pas valide.
        # on produit un rapport d'erreurs
        cr=j.report()
-       print ('cr', cr)
+       #print ('cr', cr)
        # On retablit l'etape courante step
        CONTEXT.unsetCurrentStep()
        CONTEXT.setCurrentStep(step)
@@ -545,6 +545,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
     for e in self.etapes: 
         e.niveau=self.niveau
         e.parent=self.parent
+        e.state='change'
 
     index=self.jdc.etapes.index(self)
     self.jdc.etapes=self.jdc.etapes[:index+1]+self.etapes+self.jdc.etapes[index+1:]
@@ -613,7 +614,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
     """
         Cette methode sert a craer un contexte en interpratant un texte source Python.
     """
-    print ("makeContexteInclude",fichier)
+    #print ("makeContexteInclude",fichier)
     # on recupere le contexte d'un nouveau jdc dans lequel on interprete text
     contexte = self.getContexteJdc(fichier,text)
     if contexte == None :
@@ -627,7 +628,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
       # g_context est utilise pour avoir les concepts produits par la macro
       # contexte_fichier_init est utilise pour avoir les concepts supprimes par la macro
       self.contexte_fichier_init = contexte
-    print ("fin makeContexteInclude",fichier)
+    #print ("fin makeContexteInclude",fichier)
 
   def reevalueFichierInitObsolete(self):
       """Recalcule les concepts produits par le fichier enregistre"""
index e6675cda6825c2fda336c59445b39e5ad692fbb5..e8e30416fa2d0eb4e8ca723a2f3694b1af268aea 100644 (file)
@@ -193,6 +193,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
     self.initModif()
     self.mc_liste.remove(objet)
     CONNECTOR.Emit(self,"supp",objet)
+    objet.deletePyxbObject()
     objet.deleteMcGlobal()
     objet.updateConditionBloc()
     objet.supprime()
index de49c8f058cb1ad8e498fe3e6a6a89130406c8c2..6e30cc1ea01345f56c964d56affa6e86eed32669 100644 (file)
@@ -42,6 +42,13 @@ class MCFACT(I_MCCOMPO.MCCOMPO):
     if len(objet) > 1 : return 0
     else : return 1
 
+  def getMinMax(self):
+     """
+     Retourne les valeurs min et max admissibles pour la valeur de self
+     """
+     return self.definition.min,self.definition.max
+
+
   def getLabelText(self):
     """
        Retourne le label de self suivant qu'il s'agit d'un MCFACT
index b1959059f2770f898908058218f995768b3412bc..15e80c99cacc5747dca270759ab499052f171cbd 100644 (file)
@@ -80,6 +80,7 @@ class MCList:
       self.remove(obj)
       CONNECTOR.Emit(self,"supp",obj)
       self.updateConditionBloc()
+      obj.deletePyxbObject()
       obj.supprime()
       self.etape.modified()
       self.finModif()
index 1a907c8a3474935cdff7a8827299dd1658e33d80..7c46b5898ed8e3bde5fd63947aec974d57d81038 100644 (file)
@@ -64,9 +64,10 @@ class MCSIMP(I_OBJECT.OBJECT):
           if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice':
              self.monType=type_permis
              return self.valideMatrice(cr=cr)
-      if self.definition.siValide != None :
+      validite=Validation.V_MCSIMP.MCSIMP.isValid(self,cr=cr)
+      if self.definition.siValide != None and validite:
             self.definition.siValide(self)
-      return Validation.V_MCSIMP.MCSIMP.isValid(self,cr=cr)
+      return validite 
 
   def getNomConcept(self):
       p=self
index 8110fd46efefae85b93648910456dfe1be344c6a..0c094e4f49621ec131f8b00124052bd1578520f8 100644 (file)
@@ -130,6 +130,12 @@ class configBase(object):
       self.withXSD=False
       self.afficheIhm=True
       self.closeParenthese=False
+      self.enleverActionStructures=False
+      self.enleverParametres=False
+      self.enleverSupprimer=False
+      self.ajoutExecution=False
+      self.utilParExtensions=False
+
 
 
  
index 5152872594f4a82139ea92d8263ec3bc7d85c35a..a95c1c62850e694e629b9edfdd5f5410baba1d3f 100755 (executable)
@@ -420,7 +420,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
       # si possible on renomme l objet comme le noeud couper
 
       if (self.QWParent.edit == "couper"):
-         print ('je pass la')
+         #print ('je pass la')
          if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
            QMessageBox.critical( self, tr("Deplacement refuse"),tr('Deplacement refuse entre 2 fichiers. Seule la copie est autorisee '))
 
@@ -521,9 +521,9 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
          nodeOuAjouter=self.node_selected[0]
          if nodeOuAjouter != self.tree.racine :
             while  nodeOuAjouter.treeParent != self.tree.racine:
-                   print (nodeOuAjouter)
+                   #print (nodeOuAjouter)
                    nodeOuAjouter=nodeOuAjouter.treeParent
-                   print (nodeOuAjouter.parent == self.tree.racine)
+                   #print (nodeOuAjouter.parent == self.tree.racine)
          nouveau=nodeOuAjouter.appendBrother(nomEtape)
       try : 
         self.node_selected[0].setSelected(False)
@@ -1023,13 +1023,13 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     def ajoutMCFact(self,etape,MCFils,listeAvant=()):
     #----------------------------------------------#
     # dans le JDC
-        print ('ajoutMCFact')
+        #print ('ajoutMCFact')
         ouChercher=etape
-        print (ouChercher)
+        #print (ouChercher)
         for mot in listeAvant :
               ouChercher=ouChercher.getChild(mot,restreint="oui")
-              print (mot)
-              print (ouChercher)
+              #print (mot)
+              #print (ouChercher)
         monMC=etape.getChild(ouChercher,restreint="oui")
         if monMC== None : monMC= ouChercher.addEntite(MCFils)
         monMC.isValid()
@@ -1115,7 +1115,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
     #-----------------------
     def getEtapeCourante(self) :
     #-----------------------
-      print (self.tree.selectedItems())
+      #print (self.tree.selectedItems())
       if len(self.tree.selectedItems()) != 1 : return None
       etape=self.tree.selectedItems()[0].item.object.getEtape()
       return etape
index 66c2f887945d71606d14865fc82ee7ae540d0e69..0e3cb69d04905fecbe4e7ec7bb18c46f0a56e825 100755 (executable)
@@ -169,6 +169,7 @@ class JDCEditorSsIhm :
             self.jdc.aReafficher=False
             txt_exception  = None
             if not jdc:
+# si on est en XMML ne faut-il pas passer en Accas ?
                 self.jdc.analyse()
                 txt_exception = self.jdc.cr.getMessException()
             if txt_exception :
@@ -222,7 +223,7 @@ class JDCEditorSsIhm :
 
         CONTEXT.unsetCurrentStep()
 
-        #jdc=self.readercata.cata[0].JdC(procedure=text,
+        #if elf.appliEficas.maConfiguration
         jdc=self.readercata.cata.JdC(procedure=text,
                                     appli=self,
                                     cata=self.readercata.cata,
@@ -267,7 +268,12 @@ class JDCEditorSsIhm :
            jdc.recorded_units=units
            jdc.old_recorded_units=units
         ## PNPN est ce que la ligne suivante est bien utile ?
-        if texte == "" :jdc.analyse()
+        # elle positionne le contexte
+        # est ce qu on ne doit pas changer le format en Accas si on vient d accas ?
+        if self.format == 'xml' : return jdc
+        if texte == "" :
+           jdc.editor=self
+           jdc.analyse()
         return jdc
 
    #--------------------------------#
@@ -433,6 +439,7 @@ class JDCEditorSsIhm :
     def getTextJDC(self,format,pourRun=0,formatLigne="beautifie"):
     #-----------------------------------------------------------#
       if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+    
       if format in generator.plugins:
 
          # Le generateur existe on l'utilise
index 4c278f36bc1331062b5be6c3e90e941cdd502336..13b31b09a9d7be29acb054295725b40dcfe195b6 100644 (file)
@@ -234,7 +234,14 @@ class ContientIcones(object):
        from .monViewTexte import ViewText
        try :
          if sys.platform[0:5]=="linux" :
-           cmd="xdg-open "+ str(fichier)
+           #cmd="xdg-open "+ str(fichier)
+           #changer pour marcher dans l'EDC
+           #cmd="gedit "+ str(fichier)
+           from os.path import splitext
+           fileName,extension = splitext(fichier)
+           if extension in  self.parentQt.editor.appliEficas.maConfiguration.utilParExtensions:
+              cmd=self.parentQt.editor.appliEficas.maConfiguration.utilParExtensions[extension] + " " + str(fichier)
+           else:  cmd="xdg-open "+ str(fichier)
            os.system(cmd)
          else                         :
            os.startfile(str(fichier)) 
@@ -266,7 +273,7 @@ class ContientIcones(object):
                               self.appliEficas.maConfiguration.savedir,
                               filters)
       else:
-          print(filters)
+          #print(filters)
           fichier = QFileDialog.getOpenFileName(self.appliEficas,
                               tr('Ouvrir Fichier'),
                               self.appliEficas.maConfiguration.savedir,
@@ -299,13 +306,9 @@ class ContientIcones(object):
 
   def BFichierOuRepertoirePressed(self):
       self.fileName=""
-      print (0)
       self.file_dialog=QFileDialog()
-      print (1)
       self.file_dialog.setFileMode(QFileDialog.Directory);
-      print (2)
       self.file_dialog.setFileMode(QFileDialog.Directory|QFileDialog.ExistingFiles)
-      print (3)
       self.file_dialog.setOption(QFileDialog.DontUseNativeDialog,True);
       self.file_dialog.setWindowTitle('Choose File or Directory')
       self.explore(self.file_dialog)
index 8964f6392f2efe2d412e6b46d47e8ebf2c2387e9..55b66eec524f72b5dc1975e17fcd09baea749805 100644 (file)
@@ -41,7 +41,6 @@ class Groupe(QWidget,FacultatifOuOptionnel):
       QWidget.__init__(self,None)
       self.node=node
       self.node.fenetre=self
-      if self.node.item.nom == 'MASSES' : traceback.print_stack()
       self.setupUi(self)
       self.editor=editor
       self.obj=obj
index 2ebdbc0ec768ddb294ea53b1954c11577ece2432..7b17edbab88ec89ded5799ba2c075941586acb6c 100644 (file)
@@ -81,12 +81,12 @@ class MonRBButtonCustom(QCheckBox):
         maDefinition = self.monOptionnel.parentMC.definition.entites[self.texte]
         maLangue =  self.monOptionnel.parentMC.jdc.lang
         if hasattr(maDefinition,maLangue): 
-          monAide = getattr(maDefinition,self.monOptionnel.parentMC.jdc.lang)
+          self.monAide = getattr(maDefinition,self.monOptionnel.parentMC.jdc.lang)
         else : 
-          monAide = ""
+          self.monAide = ""
       except :
-          monAide = ""
-      self.monOptionnel.parentMC.editor.afficheCommentaire(monAide)
+          self.monAide = ""
+      self.monOptionnel.parentMC.editor.afficheCommentaire(self.monAide)
   
 class MonPBButtonCustom(QWidget,Ui_customPB):
 
index a1c11b7b83669b738ea92942d592db5b5a926a11..49a431a437bd9644abe9a81e05d99829ec3898e3 100644 (file)
@@ -39,7 +39,9 @@ class MonLayoutBouton :
 
       self.appliEficas = appliEficas
       self.buttonGroup = QButtonGroup()
-      for nomEtape in self.appliEficas.readercata.cata_ordonne_dico:
+    
+      for etape in self.appliEficas.readercata.cata.JdC.commandes :
+        nomEtape = etape.nom
         toolButton = QToolButton(self.appliEficas.toolBarCommande)
         icon = QIcon()
         if nomEtape in self.appliEficas.maConfiguration.dicoIcones:
index 38f5805b86f4fb244296e75acfae545656752984..d756cb28cdf3539963f5c0d390cd99a8c882e3be 100644 (file)
@@ -41,6 +41,9 @@ class MonWidgetFactCommun(Groupe):
       self.GroupBox.setTextInteractionFlags(Qt.TextSelectableByMouse)
       self.parentQt.commandesLayout.insertWidget(insertIn,self)
       self.doitAfficherOptionnel=False
+      min,max=obj.getMinMax()
+      if max < 2 and  hasattr(self, 'RBPlus') : self.RBPlus.close() 
+      if max > 1 and  hasattr(self, 'RBPlus') : self.RBPlus.clicked.connect(self.ajouteMCParPB)
 
   def enterEvent(self,event):
       #print "enterEvent ", self.node.item.getLabelText()[0]
@@ -57,6 +60,14 @@ class MonWidgetFactCommun(Groupe):
       #print "delayAffiche, self.doitAfficherOptionnel = ", self.doitAfficherOptionnel
       if self.doitAfficherOptionnel and self.editor.code != "CARMELCND" :self.afficheOptionnel()
 
+  def ajouteMCParPB(self):
+      texteListeNom="+"+self.obj.nom
+      parentOuAjouter=self.parentQt
+      from .monWidgetBloc import MonWidgetBloc
+      while (parentOuAjouter and isinstance(parentOuAjouter, MonWidgetBloc)) :
+         parentOuAjouter=parentOuAjouter.parentQt
+      parentOuAjouter.ajoutMC(texteListeNom)
+
 
 class MonWidgetFact(Ui_WidgetFact,MonWidgetFactCommun):
   def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1):
index fa3cd9dba933406e2bd2d7c18b582bb9a4d483ea..904e5841a9f19c780a0f37d74406aeca9ad9923f 100644 (file)
@@ -42,9 +42,11 @@ class  MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel):
      self.vireLesAutres(MC)
    
      if MC.node.item.nom in self.dicoMCWidgetOptionnel :
+        #print (MC.node.item.nom)
         self.dicoMCWidgetOptionnel[MC.node.item.nom].close()
         self.dicoMCWidgetOptionnel[MC.node.item.nom].setParent(None)
         self.dicoMCWidgetOptionnel[MC.node.item.nom].deleteLater()
+        del self.dicoMCWidgetOptionnel[MC.node.item.nom]
      if liste==[] : return
      groupe = MonGroupeOptionnel(liste,liste_rouge,self,MC)
      self.groupesOptionnelsLayout.insertWidget(0,groupe)
index 0c81134aec4ae73386690d17a3be359201734363..ddbc9894cfcc081695ab61e3d363f23dd8934a57 100644 (file)
@@ -86,7 +86,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe)
 
 
   def changeTout(self,int):
-       print ('changeTout')
+       #print ('changeTout')
        if self.inhibe : return
        self.inhibe=True
        if not(self.CBCheck.isChecked()) : 
@@ -111,7 +111,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe)
        self.changeValeur()
 
   def setValeurs(self):
-       print ('setValeurs')
+       #print ('setValeurs')
        self.listeValeursCourantes =self.node.item.getValeur()
        if self.listeValeursCourantes ==  None : self.listeValeursCourantes=[]
        #print "ds set Valeur", self.listeValeursCourantes, self.node.item.getValeur()
@@ -168,7 +168,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe)
        
 
   def ajoutCB(self,index,valeur=None):
-      print ('ajoutCB')
+      #print ('ajoutCB')
       nomCB="lineEditVal"+str(index)
       if hasattr(self,nomCB) : return
       nouveauCB = QCheckBox(self.scrollArea)
@@ -184,7 +184,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe)
 
 
   def ajout1Valeur(self,valeur=None):
-        print ('ajout1Valeur')
+        #print ('ajout1Valeur')
         if valeur == None : return
         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
         if validite == 0 : return
@@ -202,7 +202,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe)
 
 
   def changeValeur(self):
-      print ('changeValeur')
+      #print ('changeValeur')
       if self.inhibe == True: return
       if hasattr(self,'LEFiltre') :self.noircirResultatFiltre()
       self.listeValeursCourantesAvant=self.listeValeursCourantes
@@ -235,7 +235,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe)
 
 
   def prepareListeResultatFiltre(self):
-      print ('prepareListeResultatFiltre')
+      #print ('prepareListeResultatFiltre')
       filtre=str(self.LEFiltre.text())
       for cb in self.listeCB:
           texte=cb.text() 
@@ -248,12 +248,12 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe)
             self.listeCbRouge.append(cb)
 
   def prepareListeResultat(self):
-      print ('prepareListeResultat')
+      #print ('prepareListeResultat')
       self.clearAll()
       self.setValeurs()
 
   def clearAll(self):
-      print ('clearAll')
+      #print ('clearAll')
       for cb in self.listeCB :
          cb.setText("")
 
index ace27ef0e5bbd32f334ec6313a913cdb01ea7051..531f0a4357a25438ff37f57b3d5da412a08f0956 100644 (file)
@@ -412,7 +412,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
 
         validite,comm,comm2,listeRetour= self.politique.ajoutNTuple(listeComplete)
         if not validite : 
-           self.editor.afficheInfos(texte,Qt.red)
+           self.editor.afficheInfos(comm+comm2,Qt.red)
            return
 
         # on calcule le dernier lineedit rempli avant de changer la valeur
index 711e84f2078a00ed8deb761cc4844cd5e3beb790..129046be58d590d7262148b4142db5f957f57035 100644 (file)
@@ -55,7 +55,7 @@ class MonWidgetRadioButtonCommun (Feuille):
   def setValeursApresBouton(self):
       if self.objSimp.getValeur()==None : return
       valeur=self.objSimp.getValeur()
-      if not(type(valeur) == str) : valeur=str(valeur)
+      if not(isinstance(valeur, str)) : valeur = str(valeur)
       try :
         self.dict_bouton[valeur].setChecked(True)
         self.dict_bouton[valeur].setFocus(True)
@@ -73,7 +73,7 @@ class MonWidgetRadioButtonCommun (Feuille):
          nomBouton="radioButton_"+str(i)
          bouton=getattr(self,nomBouton)
          valeur=self.maListeDeValeur[i-1]
-         if not(type(valeur) == str) : valeur=str(valeur)
+         if not(isinstance(valeur, str)) : valeur = str(valeur)
          bouton.setText(tr(valeur))
          self.dict_bouton[valeur]=bouton
          bouton.clicked.connect(self.boutonclic)
index c5eb945f5255cb4cffb2edf89fbcd5f666d72cf7..08de9be6bd88b8f24ce9dbefc958975533685819 100755 (executable)
@@ -99,11 +99,16 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow):
 
         icon = QIcon(self.repIcon+"/parametres.png")
         self.actionParametres.setIcon(icon)
-
         if  hasattr (self, 'maConfiguration') and self.maConfiguration.boutonDsMenuBar  : 
            self.frameEntete.setMaximumSize(QSize(16777215,100))
            self.frameEntete.setMinimumSize(QSize(0,100))
-           
+        if  hasattr (self, 'maConfiguration') and self.maConfiguration.enleverActionStructures  : 
+            self.enleverActionsStructures()
+        if  hasattr (self, 'maConfiguration') and self.maConfiguration.enleverParametres  : 
+            self.enleverParametres()
+        if  hasattr (self, 'maConfiguration') and self.maConfiguration.enleverSupprimer : 
+            self.enleverSupprimer()
+
 
         self.myQtab.removeTab(0)
         self.blEnteteGlob = QBoxLayout(2,self.frameEntete)
@@ -139,6 +144,7 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow):
         self.menuFichier.removeAction(self.actionARemplacer)
         self.connecterSignaux()
         self.toolBar.addSeparator()
+
         if self.code != None : self.construitMenu()
 
         self.setWindowTitle(self.VERSION_EFICAS)
@@ -196,6 +202,8 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow):
           Appli.__dict__[self.code.upper()](self,)
         if self.suiteTelemac : self.lookSuiteTelemac()
         self.metMenuAJourUtilisateurs()
+        if  hasattr (self, 'maConfiguration') and self.maConfiguration.ajoutExecution : 
+            self.ajoutExecution()
 
     def initAides(self):
         #print "je passe la"
@@ -379,6 +387,14 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow):
         self.menuOptions.addAction(self.actionParametres_Eficas)
         self.menuOptions.setTitle(tr("Options"))
 
+    def MAPIDENTIFICATION(self):
+        self.enlevernewInclude()
+        self.enleverSupprimer()
+        #self.ajoutExecution()
+        self.enleverRechercherDsCatalogue()
+        self.enleverActionsStructures()
+        self.enleverParametres()
+
     def PSEN(self):
         if self.first:  self.first=0
         try : self.action_Nouveau.triggered.disconnect(self.fileNew)
index 1881851fb31722d5bb1b0d879e9a4ab43175f0bf..1b0b79ab527cce468afbd1738d6b447730ece1e7 100644 (file)
@@ -111,7 +111,8 @@ class SaisieValeur(object):
             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 (type(valeurTraitee) in types.StringTypes) and (self.node.item.waitTxm())) :
+        if (valeurTraitee and  isinstance(valeurTraitee, str)  and (self.node.item.waitTxm())) :
            valeur=str(valeurTraitee)
 
 
index 4b8c25dc0e777615638289f016e223c5519663e2..f788c8b6e386a316563dc371528dd55d23215aec 100644 (file)
@@ -188,7 +188,21 @@ class ReaderCata (ReaderCataCommun):
       """
       # import du catalogue
       self.choisitCata()
+
+      if self.appliEficas.maConfiguration.withXSD :
+         try :
+           #import raw.Telemac2d as modeleMetier
+           #import raw.cata_genere_fact as modeleMetier
+           import raw.cata_map_genere as modeleMetier
+           #import raw.cata_bloc as modeleMetier
+           print ('import Test ad modeleMetier')
+         except :
+           modeleMetier = None
+      else :
+           modeleMetier = None
+
       self.cata = self.importCata(self.fic_cata)
+      self.cata.modeleMetier = modeleMetier
       if not self.cata :
           QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fic_cata)
           self.appliEficas.close()
@@ -200,6 +214,8 @@ class ReaderCata (ReaderCataCommun):
       # retrouveOrdreCataStandard fait une analyse textuelle du catalogue
       # remplace par retrouveOrdreCataStandardAutre qui utilise une numerotation
       # des mots cles a la creation
+      #print (self.cata)
+      #print (dir(self.cata))
       self.retrouveOrdreCataStandardAutre()
       if self.appliEficas.maConfiguration.modeNouvCommande == "initial" : self.retrouveOrdreCataStandard()
       if hasattr(self.cata, 'Ordre_Des_Commandes') : self.Ordre_Des_Commandes=self.cata.Ordre_Des_Commandes
@@ -254,6 +270,7 @@ class ReaderCata (ReaderCataCommun):
       except:
           pass
 
+      #if 1 :
       try :
           o=__import__(nom_cata)
           return o
@@ -271,6 +288,8 @@ class ReaderCata (ReaderCataCommun):
           contient le nom des mots cles dans le bon ordre
       """
       self.cata_ordonne_dico, self.appliEficas.liste_simp_reel=autre_analyse_cata.analyseCatalogue(self.cata)
+      #self.appliEficas.liste_simp_reel = ()
+      #self.cata_ordonne_dico = {}
 
    def retrouveOrdreCataStandard(self):
       """
index 3d421d901bcb45bb95336ae7b8f9a82504985214..5579a82b60aff7ada8f1b16dd5f1a8162cd816e0 100644 (file)
@@ -33,7 +33,8 @@ from monChoixCata import MonChoixCata
 from Extensions.i18n import tr
 from Extensions.eficas_exception import EficasException
 import uiinfo
-from Efi2Xsd import readerEfficas
+from Efi2Xsd import readerEfiXsd
+# ATtention pas teste depuis le chgt de nom
 
 from readercata import ReaderCataCommun
 
@@ -69,7 +70,7 @@ class ReaderCata (ReaderCataCommun):
       #xml = open('/home/A96028/QT5GitEficasTravail/eficas/CataTestXSD/cata_test1.xml').read()
       self.choisitCata()
       xml=open(self.fic_cata).read()
-      SchemaMed = readerEfficas.efficas.CreateFromDocument(xml)
+      SchemaMed = readerEfiXsd.efficas.CreateFromDocument(xml)
       SchemaMed.exploreCata() 
       self.cata=SchemaMed
       uiinfo.traite_UIinfo(self.cata)
index 396436d2af2de4c6e3b5c7c535b5dfa2b6436ee9..f9e2e944269d4696ffe1bbfa95d0bd3ce77b95af 100644 (file)
@@ -50,7 +50,7 @@ class PopUpMenuNodeMinimal(object) :
 #---------------------------#
 
     def createPopUpMenu(self):
-        print ("createPopUpMenu")
+        #print ("createPopUpMenu")
         #self.appliEficas.salome=True
         self.createActions()
         self.menu = QMenu(self.tree)
index 95e43e860e6324d12a9518d3eb6c2f3c6bfdf70b..0050a29420b4c98d9e33917b41e46e17a66d8467 100644 (file)
@@ -419,7 +419,7 @@ class MyViewManager(object):
        if editor.getEtapeCourante() == None :
           QMessageBox.information( self.appliEficas,
                       tr("Selectionner une etape"),
-                      tr("Le texte ne peut pas etre insere dans un fichier vide,\nCreer un materiau vide et inserer le catalogue apres"))
+                      tr("Le texte ne peut pas etre insere dans un fichier vide,\nCreer un materiau vide ou une zone vide et inserer le catalogue apres"))
           return
 
        listeParam = [] 
index e1b24e8fe3b3a98084280ba17c2d5224feb08925..c8f64871790c18127005fe276a7dbcc9a7158931 100644 (file)
@@ -80,12 +80,12 @@ class BLOC(N_ENTITE.ENTITE):
         self.entites = args
         self.affecter_parente()
 
-    def __call__(self, val, nom, parent=None):
+    def __call__(self, val, nom, parent=None, dicoPyxbDeConstruction=None):
         """
             Construit un objet MCBLOC a partir de sa definition (self)
             de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
         """
-        return self.class_instance(nom=nom, definition=self, val=val, parent=parent)
+        return self.class_instance(nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
 
     def verifCata(self):
         """
index c3296c9b3bd3ebf43d14bc22d17a9933b3b8b537..a92b04f994386c9c913dc79607bf71ed0d05d5c6 100644 (file)
@@ -66,7 +66,16 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
          - reuse : indique le concept d'entree reutilise. Il se trouvera donc en sortie
                    si les conditions d'execution de l'operateur l'autorise
          - valeur : arguments d'entree de type mot-cle=valeur. Initialise avec l'argument args.
-        """
+         - objPyxbDeConstruction
+        """
+        # faut il le faire ds MC_Build ?
+        # traitement de Pyxb si Pyxb
+        self.dicoPyxbDeConstruction = args.get('dicoPyxbDeConstruction', None)
+        if self.dicoPyxbDeConstruction : 
+            del args['dicoPyxbDeConstruction']
+            self.objPyxbDeConstruction=self.dicoPyxbDeConstruction['objEnPyxb']
+        else : 
+            self.objPyxbDeConstruction=None
         self.definition = oper
         self.reuse = reuse
         self.valeur = args
@@ -81,12 +90,15 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
         self.actif = 1
         self.makeRegister()
         self.icmd = None
+        print ('uuuuuuuuuuuuuuu fin init de ETAPE', self,oper)
 
     def makeRegister(self):
         """
         Initialise les attributs jdc, id, niveau et realise les
         enregistrements necessaires
+        surcharge dans Ihm
         """
+        print ('makeRegister de  ETAPE')
         if self.parent:
             self.jdc = self.parent.getJdcRoot()
             self.id = self.parent.register(self)
index 721f76d09afcfe1b639ce4412db0d81201611a7a..6de7e4045debd4d0f12911e7423f4fffcdfc0a14 100644 (file)
@@ -54,7 +54,7 @@ class FACT(N_ENTITE.ENTITE):
     list_instance = N_MCLIST.MCList
     label = 'FACT'
 
-    def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",fenetreIhm=None,
+    def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",fenetreIhm=None, 
                  min=0, max=1, validators=None, **args):
         """
             Un mot-clé facteur est caractérisé par les attributs suivants :
@@ -89,7 +89,7 @@ class FACT(N_ENTITE.ENTITE):
         self.affecter_parente()
         self.fenetreIhm = fenetreIhm
 
-    def __call__(self, val, nom, parent):
+    def __call__(self, val, nom, parent, dicoPyxbDeConstruction = None):
         """
             Construit la structure de donnee pour un mot cle facteur a partir
             de sa definition (self) de sa valeur (val), de son nom (nom) et de
@@ -130,24 +130,30 @@ class FACT(N_ENTITE.ENTITE):
         l = self.list_instance()
         l.init(nom=nom, parent=parent)
         if type(val) in (tuple, list, self.list_instance):
+            indice=0
             for v in val:
                 if type(v) == dict or isinstance(v, _F):
                     objet = self.class_instance(
-                        nom=nom, definition=self, val=v, parent=parent)
+                        nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction[indice])
+                    indice=indice+1
                     l.append(objet)
                 elif isinstance(v, self.class_instance):
+# if faut gerer ici --> on passe la avec une liste de concept ? 
+# PNPN --> si pyxb
                     l.append(v)
                 else:
                     l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
         elif type(val) == dict or isinstance(val, _F):
             objet = self.class_instance(
-                nom=nom, definition=self, val=val, parent=parent)
+                nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
             l.append(objet)
         elif isinstance(val, self.class_instance):
+# idem --> quand passe t on la 
             l.append(val)
         else:
             l.append(N_OBJECT.ErrorObj(self, val, parent, nom))
-
+        l.cata=l.jdc.cata
+        l.buildObjPyxb(l)
         return l
 
     def verifCata(self):
index cdcf0e9abe2f34e4a92248ef2f41c94b3dee43aa..172ed05ac2b258a757c7f54ff7dfa3b8d72e1b53 100644 (file)
@@ -177,6 +177,12 @@ Causes possibles :
             self.cr.exception("Compilation impossible : " + ''.join(l))
         return
 
+    def setCurrentContext(self):
+        # beaucoup trop simple Ne tient pas compte des imports
+        # et des include
+        # ne sert que pour le POC
+        CONTEXT.setCurrentStep(self)
+
     def execCompile(self):
         """
            Cette methode execute le jeu de commandes compile dans le contexte
@@ -197,7 +203,7 @@ Causes possibles :
                     init2 = "from " + obj_cata.__name__ + " import *"
                     exec(init2, self.g_context)
                 else :
-                   # ici on est en xml
+                   # ici on a un catalogue en grammaire Eficas XML
                    # il faut ajouter ce qu on a construit au contexte
                    for (k,v) in obj_cata.contexteXML.items() :
                        self.g_context[k]=v
index 6ce9f5c6d56c57b630d6c2789eb4f3a2b4716bcc..27a76e8f8dd5dfc8e59f1e292804b28f4ca57243 100644 (file)
@@ -70,7 +70,8 @@ class JDC_CATA(N_ENTITE.ENTITE):
         CONTEXT.unsetCurrentCata()
         CONTEXT.setCurrentCata(self)
         self.fenetreIhm=None
-
+        self.dictTypesXSD={}
     def __call__(self, procedure=None, cata=None, cata_ord_dico=None,
                  nom='SansNom', parent=None, **args):
         """
index 5207082b57744ba51b84289814425467d56ead36..ec8744fa17e78b3553ba59f3594372100cc203c0 100644 (file)
@@ -39,7 +39,7 @@ class MCBLOC(N_MCCOMPO.MCCOMPO):
 
     nature = "MCBLOC"
 
-    def __init__(self, val, definition, nom, parent):
+    def __init__(self, val, definition, nom, parent,dicoPyxbDeConstruction=None):
         """
            Attributs :
 
@@ -56,11 +56,14 @@ class MCBLOC(N_MCCOMPO.MCCOMPO):
             - mc_liste : liste des sous-objets du bloc construite par appel à la méthode build_mc
 
         """
+        #print ('MCBLOC' ,  val, definition, nom, parent)
         self.definition = definition
         self.nom = nom
         self.val = val
         self.parent = parent
         self.valeur = val
+        self.objPyxbDeConstruction=None
+        self.dicoPyxbDeConstruction=dicoPyxbDeConstruction
         if parent:
             self.jdc = self.parent.jdc
             self.niveau = self.parent.niveau
index 28f808b51a5bf3e0f1c5cc58af7420ff319d2892..c99d57d65551383120dc1c6e7edb0a562a056845 100644 (file)
@@ -41,6 +41,11 @@ class MCCOMPO(N_OBJECT.OBJECT):
             Construit la liste des sous-entites du MCCOMPO
             à partir du dictionnaire des arguments (valeur)
         """
+        
+        #import traceback
+        #traceback.print_stack()
+        #print(("MCCOMPO.build_mc _____________________________________", self.nom))
+        #print (self.dicoPyxbDeConstruction)
         if CONTEXT.debug:
             print(("MCCOMPO.build_mc ", self.nom))
         # Dans la phase de reconstruction args peut contenir des mots-clés
@@ -51,6 +56,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
         args = self.valeur
         if args == None: args = {}
         mc_liste = []
+        
 
         # On recopie le dictionnaire des arguments pour protéger l'original des
         # delete (del args[k])
@@ -62,6 +68,9 @@ class MCCOMPO(N_OBJECT.OBJECT):
         # 2- les entités non présentes dans les arguments, présentes dans la définition avec un défaut
         # Phase 1.1 : on traite d'abord les SIMP pour enregistrer les mots cles
         # globaux
+        # PN ligne suivante uniquement pour commodite
+        # a detruire quand cela fonctionne recursivement
+        if not hasattr(self, 'dicoPyxbDeConstruction') : self.dicoPyxbDeConstruction = {}
         for k, v in list(self.definition.entites.items()):
             if v.label != 'SIMP':
                 continue
@@ -71,7 +80,12 @@ class MCCOMPO(N_OBJECT.OBJECT):
                 # si une valeur existe dans args ou est obligatoire (generique si toutes les
                 # entites ont l attribut statut )
                 #
-                objet = v(val=args.get(k, None), nom=k, parent=self)
+                if self.dicoPyxbDeConstruction and  k in self.dicoPyxbDeConstruction : 
+                   objPyxbDeConstruction=self.dicoPyxbDeConstruction[k]
+                   del self.dicoPyxbDeConstruction[k]
+                else :
+                   objPyxbDeConstruction=None
+                objet = v(val=args.get(k, None), nom=k, parent=self,objPyxbDeConstruction=objPyxbDeConstruction)
                 mc_liste.append(objet)
                 # Si l'objet a une position globale on l'ajoute aux listes
                 # correspondantes
@@ -94,7 +108,12 @@ class MCCOMPO(N_OBJECT.OBJECT):
                 # si une valeur existe dans args ou est obligatoire (generique si toutes les
                 # entites ont l attribut statut )
                 #
-                objet = v(val=args.get(k, None), nom=k, parent=self)
+                if self.dicoPyxbDeConstruction and  k in self.dicoPyxbDeConstruction : 
+                   dicoPyxbDeConstruction=self.dicoPyxbDeConstruction[k]
+                   del self.dicoPyxbDeConstruction[k]
+                else :
+                   dicoPyxbDeConstruction=None
+                objet = v(val=args.get(k, None), nom=k, parent=self,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
                 mc_liste.append(objet)
             if k in args:
                 del args[k]
@@ -121,7 +140,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
                     #        2- on l'ajoute à mc_liste
                     #        3- on récupère les arguments restant
                     # 4- on reconstruit le dictionnaire équivalent à mc_liste
-                bloc = v(nom=k, val=args, parent=self)
+                bloc = v(nom=k, val=args, parent=self,dicoPyxbDeConstruction=self.dicoPyxbDeConstruction)
                 mc_liste.append(bloc)
                 args = bloc.reste_val
                 # On ne recalcule pas le contexte car on ne tient pas compte des blocs
@@ -134,6 +153,11 @@ class MCCOMPO(N_OBJECT.OBJECT):
         # (utile seulement pour IHM graphique)
         mc_liste = self.ordonneListe(mc_liste)
         # on retourne la liste ainsi construite
+        self.cata=self.jdc.cata
+        self.buildObjPyxb(mc_liste)
+        #else : print ('pas de construction pour ', self.nom, self.objPyxbDeConstruction)
+        #print ('buildObjPyxb : ' , self.nom)
+        print(("MCCOMPO.build_mc fin_____________________________________", self.nom))
         return mc_liste
 
     def ordonneListe(self, mc_liste):
index 8edc5cc896091d948d3f4ac429a6d2573affdedd..dad024a46e561402675e999c9eaba5d123eea9ba 100644 (file)
@@ -34,7 +34,7 @@ class MCFACT(N_MCCOMPO.MCCOMPO):
     """
     nature = "MCFACT"
 
-    def __init__(self, val, definition, nom, parent):
+    def __init__(self, val, definition, nom, parent,dicoPyxbDeConstruction):
         """
            Attributs :
             - val : valeur du mot clé simple
@@ -42,6 +42,16 @@ class MCFACT(N_MCCOMPO.MCCOMPO):
             - nom
             - parent
         """
+        #print ('MCFACT', self, val, definition, nom, parent, objPyxbDeConstruction)
+        import traceback
+        #traceback.print_stack()
+        #if nom == 'experience' : print ('MCFACT', self, parent, dicoPyxbDeConstruction); exit()
+        self.dicoPyxbDeConstruction=dicoPyxbDeConstruction
+        if self.dicoPyxbDeConstruction :
+           self.objPyxbDeConstruction=self.dicoPyxbDeConstruction['objEnPyxb']
+           del self.dicoPyxbDeConstruction['objEnPyxb']
+        else :
+           self.objPyxbDeConstruction=None
         self.definition = definition
         self.nom = nom
         self.val = val
index 1f2cee9c605f37feec313bfbf622ef2255fa61f1..97b5caf2ed8f409d37b58d0d86f2231d7eb01132 100644 (file)
@@ -50,6 +50,7 @@ class MCList(UserList):
     nature = 'MCList'
 
     def init(self, nom, parent):
+        self.objPyxbDeConstruction=None
         self.definition = None
         self.nom = nom
         self.parent = parent
index df387df0c73f03361d0f86ffff6777298e89c1ab..9c1125b1f47254be4fe39ed9d8555340e16e3688 100644 (file)
@@ -40,7 +40,7 @@ class MCSIMP(N_OBJECT.OBJECT):
     """
     nature = 'MCSIMP'
 
-    def __init__(self, val, definition, nom, parent):
+    def __init__(self, val, definition, nom, parent,objPyxbDeConstruction):
         """
            Attributs :
 
@@ -57,19 +57,28 @@ class MCSIMP(N_OBJECT.OBJECT):
             - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut
 
         """
+        #print ("MCSIMP, ------------------------")
+        #print (self, val, definition, nom, parent)
+        #print ("MCSIMP, ------------------------")
         self.definition = definition
         self.nom = nom
         self.val = val
         self.parent = parent
         self.convProto = ConversionFactory('type', typ=self.definition.type)
         self.valeur = self.GETVAL(self.val)
+        self.objPyxbDeConstruction=objPyxbDeConstruction
         if parent:
-            self.jdc = self.parent.jdc
+            self.jdc  = self.parent.jdc
+            self.cata = self.jdc.cata
             self.niveau = self.parent.niveau
             self.etape = self.parent.etape
+            self.buildObjPyxb()
         else:
             # Le mot cle simple a été créé sans parent
+            # est-ce possible ?
+            print ('je suis dans le else sans parent du build')
             self.jdc = None
+            self.cata = None
             self.niveau = None
             self.etape = None
 
index 0ab3f5555cb0f3dacd14ec30c48825fe1b7f8fcf..955b0897a2ae9b39d42e3185b0d563619ca879c9 100644 (file)
@@ -86,7 +86,7 @@ class OPER(N_ENTITE.ENTITE):
     label = 'OPER'
     nommage = nommage
 
-    def __init__(self, nom, op, sd_prod, reentrant='n', repetable='o', fr="",ang="",fenetreIhm=None,
+    def __init__(self, nom, op=None, sd_prod=None, reentrant='n', repetable='o', fr="",ang="",fenetreIhm=None,
                  docu="", regles=(), op_init=None, niveau = None, UIinfo=None, **args):
         """
            Méthode d'initialisation de l'objet OPER. Les arguments sont utilisés pour initialiser
index 84055eb19115075d18b5a6efe157e8ed271731d3..9606f3513e498b1b193591e307f401d50d40958b 100644 (file)
@@ -69,6 +69,10 @@ class SIMP(N_ENTITE.ENTITE):
             - sug : valeur suggere
             - fenetreIhm=None 
         """
+        #print (self)
+        #import traceback
+        #traceback.print_stack()
+        #print (self)
         N_ENTITE.ENTITE.__init__(self, validators)
         # Initialisation des attributs
         if type(typ) == tuple:
@@ -110,27 +114,26 @@ class SIMP(N_ENTITE.ENTITE):
         self.checkPosition()
         self.checkValidators()
 
-    def __call__(self, val, nom, parent=None):
+    def __call__(self, val, nom, parent=None, objPyxbDeConstruction = None):
         """
             Construit un objet mot cle simple (MCSIMP) a partir de sa definition (self)
             de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
         """
-        return self.class_instance(nom=nom, definition=self, val=val, parent=parent)
-
-    def creeT_SIMP(self):
-        from Efi2Xsd.readerEfficas import monSIMP
-        from Efi2Xsd.mapDesTypes import dictSIMPEficasXML
-        
-        self.objXML=monSIMP()
-        for nomEficasArg in dictSIMPEficasXML :
-           argu=getattr(self,nomEficasArg)
-           nomXMLarg=dictSIMPEficasXML[nomEficasArg]
-           if not isinstance(nomXMLarg, (list, tuple)) :
-              print(nomXMLarg, argu)
+        return self.class_instance(nom=nom, definition=self, val=val, parent=parent, objPyxbDeConstruction=objPyxbDeConstruction)
+
+#    def creeT_SIMP(self):
+#        from Efi2Xsd.readerEfficas import monSIMP
+#        from Efi2Xsd.mapDesTypes import dictSIMPEficasXML
+#        self.objXML=monSIMP()
+#        for nomEficasArg in dictSIMPEficasXML :
+#           argu=getattr(self,nomEficasArg)
+#           nomXMLarg=dictSIMPEficasXML[nomEficasArg]
+#           if not isinstance(nomXMLarg, (list, tuple)) :
+#              print(nomXMLarg, argu)
               #if nomEficasArg  in listeParamDeTypeTypeAttendu:
               #   typeAttendu = self.typ
-                 
-              setattr(self.objXML, nomXMLarg, argu)
+#                 
+#              setattr(self.objXML, nomXMLarg, argu)
            
 
 
index 2a9dbbec400c6465f9d51d36a2573a0d632031c0..cba4773d5dd7881c6703eb2cfd256e0c3a3567d6 100644 (file)
    <property name="spacing">
     <number>0</number>
    </property>
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
+   <property name="margin">
     <number>0</number>
    </property>
    <item>
            </property>
           </spacer>
          </item>
+         <item>
+          <widget class="QToolButton" name="RBPlus">
+           <property name="minimumSize">
+            <size>
+             <width>21</width>
+             <height>25</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>21</width>
+             <height>25</height>
+            </size>
+           </property>
+           <property name="styleSheet">
+            <string notr="true">border : 0px</string>
+           </property>
+           <property name="text">
+            <string>...</string>
+           </property>
+           <property name="icon">
+            <iconset>
+             <normaloff>../Editeur/icons/PlusBleu.png</normaloff>../Editeur/icons/PlusBleu.png</iconset>
+           </property>
+           <property name="iconSize">
+            <size>
+             <width>21</width>
+             <height>25</height>
+            </size>
+           </property>
+          </widget>
+         </item>
          <item>
           <widget class="QToolButton" name="RBPoubelle">
            <property name="minimumSize">
   </layout>
   <zorder></zorder>
   <zorder></zorder>
-  <zorder></zorder>
-  <zorder>verticalSpacer_2</zorder>
-  <zorder></zorder>
  </widget>
  <customwidgets>
   <customwidget>