From 5fa9ad677a39216c05fee71d0b19233cd3ca6544 Mon Sep 17 00:00:00 2001 From: PASCALE NOYRET Date: Wed, 26 Jan 2022 11:10:35 +0100 Subject: [PATCH] bug velu de la mclist + taille des blocs --- Editeur/Objecttreeitem.py | 6 --- Ihm/CONNECTOR.py | 2 +- Ihm/I_MCLIST.py | 1 + InterfaceSsIhm/editorSsIhm.py | 8 +++ InterfaceWeb/browser.py | 92 ++++++++++++++++++----------------- InterfaceWeb/compobloc.py | 55 ++++++++++++++++++--- InterfaceWeb/compomclist.py | 65 +++++++++++++++++-------- Noyau/N_BLOC.py | 3 ++ Noyau/N_MCBLOC.py | 13 +++++ Noyau/N_MCLIST.py | 3 ++ Noyau/N_OBJECT.py | 3 ++ 11 files changed, 173 insertions(+), 78 deletions(-) diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py index cbdef924..b1f16a9c 100644 --- a/Editeur/Objecttreeitem.py +++ b/Editeur/Objecttreeitem.py @@ -168,15 +168,10 @@ class ObjectTreeItem(TreeItem,Delegate): # 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): @@ -454,7 +449,6 @@ class ObjectTreeItem(TreeItem,Delegate): 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): diff --git a/Ihm/CONNECTOR.py b/Ihm/CONNECTOR.py index 31efdd4c..7b85af79 100644 --- a/Ihm/CONNECTOR.py +++ b/Ihm/CONNECTOR.py @@ -108,7 +108,7 @@ class CONNECTOR: 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): diff --git a/Ihm/I_MCLIST.py b/Ihm/I_MCLIST.py index e3a5d296..f0291843 100644 --- a/Ihm/I_MCLIST.py +++ b/Ihm/I_MCLIST.py @@ -110,6 +110,7 @@ class MCList: 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")) diff --git a/InterfaceSsIhm/editorSsIhm.py b/InterfaceSsIhm/editorSsIhm.py index b17c957a..871df824 100755 --- a/InterfaceSsIhm/editorSsIhm.py +++ b/InterfaceSsIhm/editorSsIhm.py @@ -590,6 +590,14 @@ class JDCEditorSsIhm : # 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): #--------------------------------------------------------------------# diff --git a/InterfaceWeb/browser.py b/InterfaceWeb/browser.py index 1fcc069d..cac57399 100644 --- a/InterfaceWeb/browser.py +++ b/InterfaceWeb/browser.py @@ -68,13 +68,13 @@ class JDCTree(): 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 @@ -85,11 +85,10 @@ class JDCNode(): 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 @@ -115,64 +114,66 @@ class JDCNode(): 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): #---------------------- @@ -246,7 +247,7 @@ class JDCNode(): 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() @@ -259,28 +260,29 @@ class JDCNode(): 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) diff --git a/InterfaceWeb/compobloc.py b/InterfaceWeb/compobloc.py index 392574b0..4cc497b1 100644 --- a/InterfaceWeb/compobloc.py +++ b/InterfaceWeb/compobloc.py @@ -34,13 +34,54 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): 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): diff --git a/InterfaceWeb/compomclist.py b/InterfaceWeb/compomclist.py index 244fb961..3e16328c 100644 --- a/InterfaceWeb/compomclist.py +++ b/InterfaceWeb/compomclist.py @@ -74,9 +74,47 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): 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 @@ -100,30 +138,19 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem): 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) diff --git a/Noyau/N_BLOC.py b/Noyau/N_BLOC.py index 0eef50d4..c0488603 100644 --- a/Noyau/N_BLOC.py +++ b/Noyau/N_BLOC.py @@ -159,6 +159,9 @@ class BLOC(N_ENTITE.ENTITE): 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.""" diff --git a/Noyau/N_MCBLOC.py b/Noyau/N_MCBLOC.py index 67eefcb2..c1e52189 100644 --- a/Noyau/N_MCBLOC.py +++ b/Noyau/N_MCBLOC.py @@ -121,6 +121,19 @@ class MCBLOC(N_MCCOMPO.MCCOMPO): 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=[] diff --git a/Noyau/N_MCLIST.py b/Noyau/N_MCLIST.py index 45b096df..f087e9b2 100644 --- a/Noyau/N_MCLIST.py +++ b/Noyau/N_MCLIST.py @@ -255,3 +255,6 @@ class MCList(UserList): def longueurDsArbre(self): # pour Pyxb : longueur dans le orderedcontent de pyxb return len(self) + + def longueurDsArbreAvecConsigne(self): + return self.longueurDsArbre() diff --git a/Noyau/N_OBJECT.py b/Noyau/N_OBJECT.py index 80f31056..3249dcd4 100644 --- a/Noyau/N_OBJECT.py +++ b/Noyau/N_OBJECT.py @@ -113,6 +113,9 @@ class OBJECT(object): if self.nom == "blocConsigne" : return 0 return 1 + def longueurDsArbreAvecConsigne(self): + return 1 + class ErrorObj(OBJECT): -- 2.39.2