# on met le meme id au noeud et a l objet
self.idUnique=uuid1().hex
- if self._object.nature == 'MCList' and len(self._object.data) == 1 :
- self._object.data[0].idUnique=self.idUnique
- if hasattr (self._object.data[0],'idUnique') : self._object.data[0].remplaceId = self._object.data[0].idUnique
- else : self._object.data[0].remplaceId = None
if hasattr (self._object,'idUnique') : self._object.remplaceId = self._object.idUnique
else : self._object.remplaceId = None
self._object.idUnique=self.idUnique
- # Ici on teste si Web
if hasattr (self.appliEficas,'dicoIdNode') : self.appliEficas.dicoIdNode[self.idUnique]=self
def init(self):
Cette methode, globale pour les objets de type item, permet de construire et de retourner un objet
de type item associe a l'object passe en argument.
"""
- if labeltext == 'b1 :' :print ('---------------makeObjecttreeitem', labeltext,object)
return makeObjecttreeitem(appliEficas,labeltext,object,setFunction)
#def __del__(self):
receivers = self.connections[id(object)][channel]
except KeyError:
return
- #print "Emit",object, channel, receivers
+ #print ("Emit",object, channel, receivers)
# Attention : copie pour eviter les pbs lies aux deconnexion reconnexion
# pendant l'execution des emit
for rfunc, fargs in copy(receivers):
Ajoute le mot cle facteur obj a la MCLIST a la position pos
Retourne None si l'ajout est impossible
"""
+ #print ('dans addEntite', self)
if type(obj)==bytes or type(obj) == str :
# on est en mode creation d'un motcle
raise EficasException(tr("traitement non-prevu"))
# methode differenre avec et sans ihm
print (txt)
+ #--------------------------------------#
+ def afficheAlerte(self,titre,message):
+ #--------------------------------------#
+ print ('________________________________________')
+ print (titre)
+ print (message)
+ print ('________________________________________')
+
#-----------------------------------------------------------------------#
def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
#--------------------------------------------------------------------#
COMMENT = "COMMENTAIRE"
PARAMETERS = "PARAMETRE"
+import traceback
#---------------
class JDCNode():
#--------------
def __init__( self, treeParent, item, itemExpand=False, ancien=False ):
#----------------------------------------------------------------------
#print ("creation d'un noeud : ", item, " ",item.nom,"", treeParent, treeParent.item.nom,self)
-
self.item = item
self.vraiParent = treeParent
self.treeParent = treeParent
self.childrenComplete=[]
self.oldValidite='init'
self.item.fauxNoeudGraphique = self
-
if item.nom != tr(item.nom) : name = str(tr(item.nom)+" :")
- from . import compobloc
from . import compomclist
+ from . import compobloc
while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) :
self.treeParent=self.treeParent.vraiParent
self.editor.connecteur.toWebApp('propageValide',self.getIdUnique(), validite)
def onAdd(self,ajout):
- #-----------------------
- print ('on add', '________ ajout', ajout , ' dans ', self.item.nom)
+ #----------------------
+ # derive pour MCList et MCBLOC
+ debug=0
+ if debug : print ('on add de browser', '________ ajout', ajout, ' dans ', self.item.nom)
+ if debug : print ('nature de l item', self.item.nature)
self.buildChildren()
# si on a un copie multiple --> pas gere correctement
# pas gere du tout
if len(ajout) > 1 :
- self.editor.connecteur.toWebApp('remplacementNode',self.item.remplaceId,self.getTreeParentIdUnique(),self.item.getDicoForFancy())
return
- if self.item.nature != 'MCBLOC' : ouAjouter=self.getIdUnique()
- else : ouAjouter=self.getTreeParentIdUnique()
+ # test inutile
+ ouAjouter=self.getIdUnique()
mcAjoute= ajout[0]
- posDansSelf = 0; trouve=0
+ posDansSelf = 0;
+ trouve=0
+ posDansArbre=0
for c in self.children :
if c.item._object == mcAjoute :
trouve=1
break
- posDansSelf+=1
- if not trouve : print ('souci au add *************************')
+ posDansSelf +=1
+ posDansArbre+=c.item.longueurDsArbreAvecConsigne()
+
+ if not trouve : print ('browser : souci au add *************************')
+ if debug : print ('posDansSelf', posDansSelf)
+ if debug : print ('posDansArbre', posDansSelf)
+
if self.children[posDansSelf].item.nature == 'MCBLOC' : laListe=self.children[posDansSelf].item.getDicoForFancy()
else : laListe=(self.children[posDansSelf].item.getDicoForFancy(),)
- posOuAjouter=posDansSelf
- if self.item.nature == 'MCBLOC' :
- mesParents=self.item.getParentsJusqua(self.treeParent.item)
- mesParents.insert(0,self.item.getObject())
- index=0
- while index < len(mesParents) -1 :
- parentTraite=mesParents[index+1]
- jusqua=mesParents[index]
- for c in parentTraite.mcListe:
- if c == jusqua : break
- posOuAjouter += c.longueurDsArbre()
- index=index+1
+ posOuAjouter=posDansArbre
-
self.editor.connecteur.toWebApp('appendChildren',ouAjouter,laListe,posOuAjouter)
- print ('la pos ', posOuAjouter)
+ #print ('la pos ', posOuAjouter)
#print (' appel appendChild',self.item.idUnique,laListe,pos)
def onSupp(self,suppression):
#---------------------------
- #print ('on Supp', suppression)
if len(suppression) > 1 :
- self.buildChildren()
- self.editor.connecteur.toWebApp('remplacementNode',self.item.remplaceId,self.item.idUnique(),self.item.getDicoForFancy())
+ print ('onSupp suppression multiple non valeur')
return
mcSupprime= suppression[0]
- if mcSupprime.nature != 'MCBLOC' : liste=(mcSupprime.idUnique,)
+ print (mcSupprime.__class__)
+ print (mcSupprime.nature)
+ if mcSupprime.nature == 'MCBLOC' :
+ liste=[]
+ listeMC=mcSupprime.getAllChildInBloc()
+ for mc in listeMC : liste.append(mc.idUnique)
+ elif mcSupprime.nature == 'MCList' :
+ liste=[]
+ for mc in mcSupprime.data :
+ liste.append(mc.idUnique)
else :
- liste=[]
- listeMC=mcSupprime.getAllChildInBloc()
- for mc in listeMC : liste.append(mc.idUnique)
+ liste=(mcSupprime.idUnique,)
self.buildChildren()
self.editor.connecteur.toWebApp('deleteChildren',liste)
- print (' appel deleteChildren',liste)
+ #print (' appel deleteChildren',liste)
def onRedessine(self):
#----------------------
ou en position intermediaire.
Si pos vaut None, on le place a la position du catalogue.
"""
- print ("************** appendChild ",self.item.getLabelText(), pos )
+ #print ("************** appendChild ",self.item.getLabelText(), pos )
#import traceback
#traceback.print_stack()
elif self.item.nature != 'JDC' : index = self.item.getIndexChild(name)
else : return None
+ #print (self.item.addItem)
obj = self.item.addItem(name,index) # emet le signal 'add'
- try :
- print (index)
- self.buildChildren()
- print (self.children)
- child=self.children[index]
- except :
- print ('pb u buildChildren dans appendChild')
- pass
+ # PN : boucle sur les mclist. si necessaire a deriver
+ #try :
+ # self.buildChildren()
+ # child=self.children[index]
+ #except :
+ # print ('pb buildChildren dans appendChild')
+ # pass
- print ("-------------- fin append child", child, child.item)
+ #print ("-------------- fin append child", child, child.item)
if not obj : return None
- return child.getIdUnique()
+ return True
+ #return child.getIdUnique()
def delete(self):
#----------------
"""
Methode externe pour la destruction de l'objet associe au noeud
"""
- print ('________________appel de delete _______', self)
+ #print ('browser :_appel de delete _______', self)
ret,commentaire=self.vraiParent.item.suppItem(self.item)
if ret!=0 : self.treeParent.buildChildren()
return (ret,commentaire)
typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
- def getPanelGroupe(self,parentQt,commande):
- maDefinition=self.item.get_definition()
- monObjet=self.item.object
- monNom=self.item.nom
- maCommande=commande
- if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
- else : self.niveau=1
+ def onAdd(self,ajout):
+ #----------------------
+ debug=0
+ if debug : print ('on add de mcbloc', '________ ajout', ajout, ' dans ', self.item.nom)
+ if debug : print ('nature de l item', self.item.nature)
+ self.buildChildren()
+
+ # si on a un copie multiple --> pas gere correctement
+ # pas gere du tout
+ if len(ajout) > 1 :
+ print ('ajout multiple non gere')
+ return
+
+ ouAjouter=self.getTreeParentIdUnique()
+
+ mcAjoute= ajout[0]
+ posDansSelf = 0;
+ trouve=0
+ posDansArbre=0
+
+ for c in self.children :
+ if c.item._object == mcAjoute :
+ trouve=1
+ break
+ posDansSelf +=1
+ posDansArbre+=c.item.longueurDsArbreAvecConsigne()
+ if not trouve : print ('souci au add *************************')
+ if debug : print ('posDansSelf', posDansSelf)
+ if debug : print ('posDansArbre', posDansSelf)
+ if self.children[posDansSelf].item.nature == 'MCBLOC' : laListe=self.children[posDansSelf].item.getDicoForFancy()
+ else : laListe=(self.children[posDansSelf].item.getDicoForFancy(),)
+
+ posOuAjouter=posDansArbre
+ mesParents=self.item.getParentsJusqua(self.treeParent.item)
+ mesParents.insert(0,self.item.getObject())
+ index=0
+ while index < len(mesParents) -1 :
+ parentTraite=mesParents[index+1]
+ jusqua=mesParents[index]
+ for c in parentTraite.mcListe:
+ if c == jusqua : break
+ posOuAjouter += c.longueurDsArbreAvecConsigne()
+ index=index+1
+
+
+ self.editor.connecteur.toWebApp('appendChildren',ouAjouter,laListe,posOuAjouter)
+ #print ('la pos ', posOuAjouter)
+ #print (' appel appendChild',self.item.idUnique,laListe,pos)
class BLOCTreeItem(compofact.FACTTreeItem):
def getIdUnique(self):
#---------------------
- return 3
-
-
+ print ('pas d iD unique pour la MCLIST')
+
+
+ def onAdd(self,ajout):
+ #----------------------
+ debug=0
+ if debug : print ('on add de compomclist', '________ ajout', ajout, ' dans ', self.item.nom)
+ if debug : print ('nature de l item', self.item.nature)
+ self.buildChildren()
+
+ # si on a un copie multiple --> pas gere correctement
+ # pas gere du tout
+ if len(ajout) > 1 :
+ print ('add multiple non gere')
+ return
+
+ ouAjouter=self.getTreeParentIdUnique()
+
+ mcAjoute= ajout[0]
+ posDansSelf = 0;
+ trouve=0
+ # a priori on ajoute toujours le dernier FACT a la MCListe
+ # on garde quand meme la boucle si cela evolue
+ for c in self.children :
+ if c.item._object == mcAjoute :
+ trouve=1
+ break
+ posDansSelf +=1
+ if not trouve : print ('souci au add *************************')
+ if debug : print ('posDansSelf', posDansSelf)
+ laListe=(self.children[posDansSelf].item.getDicoForFancy(),)
+
+
+ posDansArbre = posDansSelf;
+ for c in self.treeParent.children :
+ if c == self: break
+ posDansArbre +=c.item.longueurDsArbreAvecConsigne()
+
+ self.editor.connecteur.toWebApp('appendChildren',ouAjouter,laListe,posDansArbre)
+ #print ('la pos ', posOuAjouter)
+ #print (' appel appendChild',self.item.idUnique,laListe,pos)
class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
""" La classe MCListTreeItem joue le role d'un adaptateur pour les objets
else:
self.setDelegate(self._object.data[0])
- 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
- FACTPanel.
- Si la liste est plus longue on utilise le panneau MCLISTPanel.
- """
- if len(self._object) > 1:
- return MCLISTPanel(jdcdisplay,pane,node)
- elif isinstance(self._object.data[0],ErrorObj):
- return compoerror.ERRORPanel(jdcdisplay,pane,node)
- else:
- return compofact.FACTPanel(jdcdisplay,pane,node)
-
def isExpandable(self):
if len(self._object) > 1:
return Objecttreeitem.SequenceTreeItem.isExpandable(self)
else:
return compofact.FACTTreeItem.isExpandable(self)
+
def getSubList(self):
+ # Attention different de QT
self.updateDelegate()
- if len(self._object) <= 1:
- self._object.data[0].alt_parent=self._object
- return compofact.FACTTreeItem.getSubList(self)
+ #if len(self._object) <= 1:
+ # self._object.data[0].alt_parent=self._object
+ # return compofact.FACTTreeItem.getSubList(self)
liste=self._object.data
sublist=[None]*len(liste)
longueur = longueur + mc.longueurDsArbre()
return longueur
+ def longueurDsArbreAvecConsigne(self):
+ return self.longueurDsArbre()
+
def blocUtils():
"""Définit un ensemble de fonctions utilisables pour écrire les
conditions de BLOC."""
return dico
+ def longueurDsArbreAvecConsigne(self):
+ longueur=0
+ for mc in self.mcListe :
+ longueur = longueur + mc.longueurDsArbreAvecConsigne()
+ return longueur
+
+ def longueurDsArbre(self):
+ # PN 24/01/22 --> Cette methde n est pas surchage
+ # il y a une surchagre sur N_BLOC mais pas sur N_MCBLOC
+ # ???
+ print ('bizarre, ne devrait on pas surchager la methode')
+ return
+
def getAllChildInBloc(self):
# contrairement a getValeur ne retourne que les enfants de mcListe
liste=[]
def longueurDsArbre(self):
# pour Pyxb : longueur dans le orderedcontent de pyxb
return len(self)
+
+ def longueurDsArbreAvecConsigne(self):
+ return self.longueurDsArbre()
if self.nom == "blocConsigne" : return 0
return 1
+ def longueurDsArbreAvecConsigne(self):
+ return 1
+
class ErrorObj(OBJECT):