except :
pass
import types,os,glob,imp,sys
+import uuid
from copy import copy,deepcopy
# import du chargeur de composants
class ObjectTreeItem(TreeItem,Delegate):
def __init__(self, appliEficas, labeltext, object, setFunction=None):
+ #print (object,'__init__ ObjectTreeItem',labeltext,)
self.labeltext = labeltext
self.appliEficas = appliEficas
+ # Attention appliEficas n est pas appliEficas c est le JDCEditor
+ # utilise par le Web
+ self.editor = appliEficas
# L'objet delegue est stocke dans l'attribut object
# L'objet associe a l'item est stocke dans l'attribut _object
# Il peut etre obtenu par appel a la methode getObject
self.expandable = 1
self.sublist=[]
self.init()
+ # on met le meme id au noeud et a l objet
+ self.idUnique=uuid.uuid1().hex
+ self._object.idUnique=self.idUnique
+ # Ici on teste si Web
+ if hasattr (self.appliEficas,'dicoIdNode') : self.appliEficas.dicoIdNode[self.idUnique]=self
def init(self):
return
sublist.append(item)
return sublist
+ def getDicoObjetsPourWeb(self):
+ from collections import OrderedDict
+ monDico=OrderedDict()
+ for mc in self.mcListe :
+ nodeMC=self.editor.dicoIdNode[mc.idUnique]
+ if not mc.isMCList() : monDico[mc.idUnique]=nodeMC.getDicoObjetsPourWeb()
+ else :
+ for d in nodeMC.getDicoObjetsPourWeb() :
+ for i,k in d.items() : monDico[i]=k
+ return monDico
+
# a piori inutile PN 06 11 17
#def wait_fichier_init(self):
""" Retourne 1 si l'object pointe par self attend un fichier d'initialisation
if old_obj is None and obj is None:break
if old_obj is obj: self.sublist.append(item)
return self.sublist
+
if self.intoXML and self.into :
if self.intoXML != self.into :
#print ('je passe la pour ', self.nom)
- texteAide :texteAide = texteAide+'\nPossible choices for '+ self.nom + 'at this place : \n'+str(self.into)+'\n'
+ texteAide = texteAide+'\nPossible choices for '+ self.nom + 'at this place : \n'+str(self.into)+'\n'
if self.defaut :
if self.max > 1 or self.max == '**' or self.max == float('inf') :
if jdc==None :
#print ('PNPN : chgt try en if')
try :
- #if 1 :
self.jdc = self.readFile(self.fichier)
except :
print ("mauvaise lecture du fichier")
#print (dico)
return dico
+ #--------------------------------#
+ def generDicoPourWeb(self,obj=None):
+ #--------------------------------#
+ if obj==None : obj=self.jdc
+ if 'dico' in generator.plugins:
+ self.generator=generator.plugins['dico']()
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.generator.Dico
+ return dico
+
+
#-----------------------#
def viewJdcSource(self):
#-----------------------#
from Extensions.i18n import tr
#from .gereRegles import GereRegles
-class MainPage : pass
#------------------------------------------
-#class JDCTree( MainPage,GereRegles ):
-class JDCTree( MainPage ):
+class JDCTree():
#------------------------------------------
- def __init__( self, jdc_item, QWParent):
+ def __init__( self, jdc_item, editor):
#----------------------------------------
- self.editor = QWParent
+ print ('__init__ JDCTree')
+ self.editor = editor
self.plie=False
- #if self.editor.widgetTree !=None :
- # QTreeWidget.__init__(self, self.editor.widgetTree )
- # self.editor.verticalLayout_2.addWidget(self)
- # if self.editor.enteteQTree=='complet':
- # self.headerItem().setText(0, "Commande ")
- # self.headerItem().setText(1, "Concept/Valeur")
- # else :
- # self.headerItem().setText(0, "Commande ")
- # self.setColumnWidth(0,200)
- # self.setExpandsOnDoubleClick(False)
- # self.setSelectionMode(3)
- #else :
- # QTreeWidget.__init__(self, None )
self.item = jdc_item
self.tree = self
self.appliEficas = self.editor.appliEficas
- self.childrenComplete=[]
self.racine=self.item.itemNode(self,self.item)
-
+ print ('self.racine',self.racine)
self.itemCourant=None
-
- #self.itemClicked.connect(self.handleOnItem)
- #self.itemCollapsed.connect(self.handleCollapsedItem)
- #self.itemExpanded.connect(self.handleExpandedItem)
-
self.node_selected = self.racine
self.inhibeExpand = True
- #self.expandItem(self.racine)
- #self.inhibeExpand = False
- #if self.racine.children !=[] :
- # if self.editor.maConfiguration.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche()
- # else : self.racine.children[0].deplieToutEtReaffiche()
- # self.racine.children[0].fenetre.donnePremier()
- #else :
- # self.racine.affichePanneau()
+ self.childrenComplete=[]
# def handleContextMenu(self,item,coord):
#-------------------------------------
COMMENT = "COMMENTAIRE"
PARAMETERS = "PARAMETRE"
-class TreeItem : pass
-#------------------------------------------
-#class JDCNode(TreeItem,GereRegles):
-class JDCNode(TreeItem):
-#------------------------------------------
+#---------------
+class JDCNode():
+#--------------
def __init__( self, treeParent, item, itemExpand=False, ancien=False ):
#----------------------------------------------------------------------
#print ("creation d'un noeud : ", item, " ",item.nom,"", treeParent, self)
self.tree = self.treeParent.tree
self.editor = self.treeParent.editor
self.appliEficas = treeParent.appliEficas
- self.JESUISOFF = 0
self.firstAffiche = True
self.childrenComplete=[]
# self.plie = False
# self.appartientAUnNoeudPlie = False
- if ancien and itemExpand : self.plie = False
- if ancien and not itemExpand : self.plie = True
- if (isinstance(self.item,composimp.SIMPTreeItem)) : self.plie=False
+ #if ancien and itemExpand : self.plie = False
+ #if ancien and not itemExpand : self.plie = True
+ #if (isinstance(self.item,composimp.SIMPTreeItem)) : self.plie=False
- from . import compobloc
- from . import compomclist
+ #from . import compobloc
+ #from . import compomclist
- ajoutAuParentduNoeud=0
- while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) :
- self.treeParent.childrenComplete.append(self)
- self.treeParent=self.treeParent.vraiParent
- self.treeParent.childrenComplete.append(self)
+ #ajoutAuParentduNoeud=0
+ #while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) :
+ # self.treeParent.childrenComplete.append(self)
+ # self.treeParent=self.treeParent.vraiParent
+ #self.treeParent.childrenComplete.append(self)
#if (isinstance(self,compobloc.Node) or (isinstance(self,compomclist.Node) and self.item.isMCList()) or ( hasattr(self.item.parent,'inhibeValidator') and isinstance(self,compomclist.Node) and self.item.parent.inhibeValidator)) :
self.state=""
self.fenetre=None
- try :
- if self.item.getObject().isBLOC() :
- self.setExpanded(True)
- self.plie=False
- except :
- pass
+ #try :
+ # if self.item.getObject().isBLOC() :
+ # self.setExpanded(True)
+ # self.plie=False
+ #except :
+ # pass
def buildChildren(self,posInsertion=10000):
#print ("fin *********** buildChildren ",self,self.item, self.item.nom, self.children)
- def chercheNoeudCorrespondant(self,objSimp):
+ def getDicoObjetsPourWeb(self):
+ return self.item.getDicoObjetsPourWeb()
+
+ #def chercheNoeudCorrespondant(self,objSimp):
#-------------------------------------------
- sublist = self.item._getSubList()
- for node in self.childrenComplete:
- if node.item.object==objSimp : return node
- return None
+ # sublist = self.item._getSubList()
+ # for node in self.childrenComplete:
+ # if node.item.object==objSimp : return node
+ # return None
#def afficheCeNiveau(self):
#-------------------------
#def getPanelModifie(self):
else:
return "ast-red-square"
- #def keys(self):
- # if self.object.etapes_niveaux != []:
- # return range(len(self.object.etapes_niveaux))
- # else:
- # return range(len(self.object.etapes))
def addItem(self,name,pos):
cmd = self._object.addEntite(name,pos)
listeCmd = self.object.niveau.definition.getListeCmd()
return listeCmd
+ def getValidite(self):
+ return self.object.isValid()
+
+ def getDicoObjetsPourWeb(self):
+ from collections import OrderedDict
+ monDico=OrderedDict()
+ for e in self.object.etapes :
+ nodeEtape=self.editor.dicoIdNode[e.idUnique]
+ monDico[e.idUnique]=nodeEtape.getDicoObjetsPourWeb()
+ return monDico
+
+
import Accas
treeitem =JDCTreeItem
objet = Accas.JDC
else:
self.setDelegate(self._object.data[0])
+ def getDicoObjetsPourWeb(self):
+ listeDict=[]
+ from collections import OrderedDict
+ for i in self._object.data:
+ monDico=OrderedDict()
+ nodeFact=self.appliEficas.dicoIdNode[i.idUnique]
+ monDico[i.idUnique]=nodeFact.getDicoObjetsPourWeb()
+ listeDict.append(monDico)
+ return listeDict
+
+
def panel(self,jdcdisplay,pane,node):
""" Retourne une instance de l'objet panneau associe a l'item (self)
Si la liste ne contient qu'un mot cle facteur, on utilise le panneau
liste_param.append(param.nom)
return liste_param
+ def getDicoObjetsPourWeb(self):
+ return self.val
+
#--------------------------------------------------
#
# Methodes liees a la validite des valeurs saisies
from Editeur import session
from Editeur import comploader
from Editeur import Objecttreeitem
+from . import browser
debug = False
class JDCWebEditor(JDCEditorSsIhm):
-# ----------------------------------------- #
+# ------------------------------- #
"""
Editeur de jdc
"""
def __init__ (self,appliEficas,fichier = None, jdc=None ):
- #------------------------------------------------------------------------------------------------
+ #----------------------------------------------------------
JDCEditorSsIhm.__init__(self,appliEficas,fichier)
+ self.dicoIdNode={}
comploader.chargerComposants(Ihm='Web')
+ self.tree=None
if self.jdc:
self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+ if self.jdc_item :
+ self.tree = browser.JDCTree( self.jdc_item, self )
-
+ def getNodeById(self,id ):
+ #----------------------------
+ if id in self.dicoIdNode : return self.dicoIdNode[id]
+ else : return None
+
+
+ def getDicoObjetsPourWeb(self,obj) :
+ #-----------------------------------
+ if self.tree == None : return {}
+ return obj.getDicoObjetsPourWeb()
from __future__ import absolute_import
from . import N_MCCOMPO
+import uuid
class MCFACT(N_MCCOMPO.MCCOMPO):
from . import N_OBJECT
from .N_CONVERT import ConversionFactory
from .N_types import forceList, isSequence
+import uuid
class MCSIMP(N_OBJECT.OBJECT):
)
MonProc2 = PROC(nom='MonProc2',
param1 = SIMP(statut='o',typ='R'),
- param2 = SIMP(statut='o',typ='R'),
- param3 = SIMP(statut='o',typ='R'),
+ b1 = BLOC (condition = 'param1 == 2',
+ param2 = SIMP(statut='o',typ='R'),
+ ),
+ Fact1 = FACT (statut ='o', max=2,
+ param3 = SIMP(statut='o',typ='R'),
+ ),
)
--- /dev/null
+
+MonProc(param1=1.0,);
+#CHECKSUM:b556c522b90166837f3034518e10b4a4 -:FIN CHECKSUM
\ No newline at end of file
--- /dev/null
+
+MonProc2(param1=1.0,
+ Fact1=(_F(param3=43.0,),
+ _F(param3=44.0,),),);
+#CHECKSUM:d9c8c4a30d485f4a75371c76b16999b6 -:FIN CHECKSUM
\ No newline at end of file
--- /dev/null
+
+MonProc2(param1=2.0,
+ param2=42.0,
+ Fact1=_F(param3=43.0,),);
+#CHECKSUM:aee450b5fd522f0492692beed1341b4d -:FIN CHECKSUM
\ No newline at end of file
--- /dev/null
+
+MonProc2(param1=1.0,
+ Fact1=_F(param3=2.0,),);
+#CHECKSUM:361a5586857360c9841b2d609b4d97a2 -:FIN CHECKSUM
\ No newline at end of file
-/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/cata_essai.py
\ No newline at end of file
+../WebTest/cata_essai.py
\ No newline at end of file
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..'))
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../Editeur'))
+from collections import OrderedDict
if sys.version_info[0] < 3:
self.code=code
from InterfaceSsIhm.qtEficasSsIhm import AppliSsIhm
self.monEficas=AppliSsIhm(code=code, salome=0, multi=False, langue=langue,fichierCata=fichierCata)
+ # Si on permet l ouverture simultanee de plusieurs fichiers il faudra
+ # faire l equivalent du viewmanager
+ self.litFichierComm(fichierComm)
+ # est-ce que id est suffisament unique ?
+ # est-ce que cela ne va pa empecher le gc de faire son job ?
+
+ def litFichierComm(self,fichierComm=None):
from InterfaceWeb.editor import JDCWebEditor
self.monEditeur=JDCWebEditor(self.monEficas,fichierComm)
def getListeCommandes(self):
- print ('getListeCommandes', self.monEditeur.jdc.getListeCmd())
return (self.monEditeur.jdc.getListeCmd())
def getListeMotsClesFilsPossibles(self,nomCommande):
# ici il faut programmer getListeMotsClesFilsPossibles dans N_ENTITE
- # et faire une boucle infinie en jinja 2
+ # Pour l instant on renvoie entites
+ # doit aussi pouvoir etre appele sur FACT et BLOC
maCommande= getattr(self.monEditeur.jdc.cata,nomCommande)
laListe=maCommande.entites
- print (dir(maCommande))
return laListe
+
+ def generDicoPourWeb(self) :
+ dico=self.monEditeur.generDicoPourWeb()
+ return dico
+
+ def getDicoObjetsPourWeb(self,obj) :
+ dico=self.monEditeur.getDicoObjetsPourWeb(obj)
+ return dico
+
+ def traiteDico(self,dico):
+ for k,v in dico.items():
+ monNode=self.monEditeur.getNodeById(k)
+ try : print ('label', monNode.getLabelText())
+ except : print ('monNode', monNode) # non operationnel pour jdc
+ try : print ('validite :', monNode.isValid())
+ except : pass # non operationnel pour jdc
+ if type(v) is OrderedDict : self.traiteDico(v)
+ else : print ('valeur :', v)
if __name__ == "__main__":
code=prefs.code
monEficasConnecteur=accasConnecteur(code, langue='ang')
print ( 'voici le connecteur', monEficasConnecteur)
- print ( 'et les commandes', monEficasConnecteur.getListeCommandes())
- print ( 'et les fils de MonProc2', monEficasConnecteur.getListeMotsClesFils('MonProc2'))
+ print ( 'et les commandes', monEficasConnecteur.getListeCommandes(),'\n')
+
+ #print ( '\n Fichier /home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple.comm')
+ #monEficasConnecteur.litFichierComm('/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple.comm')
+ #print (monEficasConnecteur.generDicoPourWeb())
+ #print (monEficasConnecteur.getDicoObjetsPourWeb(monEficasConnecteur.monEditeur.tree.racine))
+ #print ('\n')
+
+ #monEficasConnecteur.litFichierComm('/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple_avec_Bloc.comm')
+ #print (monEficasConnecteur.generDicoPourWeb())
+ #print (monEficasConnecteur.getDicoObjetsPourWeb(monEficasConnecteur.monEditeur.tree.racine))
+ #print ('\n')
+
+ monEficasConnecteur.litFichierComm('/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple_avec_2Fact.comm')
+ print (monEficasConnecteur.generDicoPourWeb())
+ monDicoAAfficher = (monEficasConnecteur.getDicoObjetsPourWeb(monEficasConnecteur.monEditeur.tree.racine))
+ monEficasConnecteur.traiteDico(monDicoAAfficher)
+
+ #monEficasConnecteur.litFichierComm('/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple_avec_Fact.comm')
+ #print (monEficasConnecteur.generDicoPourWeb())
+ #print (monEficasConnecteur.getDicoObjetsPourWeb(monEficasConnecteur.monEditeur.tree.racine))
+ #print ('\n')