Salome HOME
linux/windows
[tools/eficas.git] / InterfaceQT4 / browser.py
index d9a8efb49fce2041bf87ef45dfa65edb3b7c157d..7594e78a1725bdade8a88f8c5a5990a815324edc 100644 (file)
@@ -22,6 +22,7 @@ import string,re
 import types,sys,os
 import traceback
 import typeNode
+import pdb
 from PyQt4 import *
 from PyQt4.QtGui  import *
 from PyQt4.QtCore import *
@@ -66,13 +67,19 @@ class JDCTree( QTreeWidget ):
         self.inhibeExpand=False
         #print "self.editor.afficheCommandesPliees", self.editor.afficheCommandesPliees
         if self.racine.children !=[] :  
+
+            
            if self.editor.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche()
            else : self.racine.children[0].deplieToutEtReaffiche()
-        else : self.racine.affichePanneau()
+        
 
+           self.racine.children[0].fenetre.donnePremier()
+        else : self.racine.affichePanneau()
+        #PNPNPN
+        #pdb.set_trace()
 
     def contextMenuEvent(self,event) :
-        print "contextMenuEvent"
+        #print "contextMenuEvent"
         coord=event.globalPos()
         item= self.currentItem()
         self.handleContextMenu(item,coord)
@@ -85,7 +92,7 @@ class JDCTree( QTreeWidget ):
         @param coord the position of the mouse pointer (QPoint)
         Attention : existeMenu permet de savoir si un menu est associe a cet item
         """
-        print "handleContextMenu"
+        #print "handleContextMenu"
         if item == None : return
         if item.existeMenu == 0 : return
         if item.menu == None:
@@ -97,22 +104,18 @@ class JDCTree( QTreeWidget ):
             
 
     def handleCollapsedItem(self,item):
-        print "dans CollapsedItem", self.inhibeExpand  
+        #print "dans CollapsedItem", self.inhibeExpand  
         if self.inhibeExpand == True : return
-        #print "apres if"
-        #print "item = ", item, item.item.get_nom()
-        #itemParent=item
-        #while not (hasattr (itemParent,'getPanel2')) : 
-        #   print "While itemParent = ", itemParent, itemParent.item.get_nom()
-        #   print itemParent.plie
-        #   if itemParent.plie==True : itemParent.setPlie()
-        #   itemParent=itemParent.treeParent 
-        #if self.tree.node_selected != self : 
-        #     item.setExpanded(False)
-        #     return
-        if item.fenetre != self.editor.fenetreCentraleAffichee : 
-           item.setPlie()
-        #print "apres 2ndif"
+        # On traite le cas de l item non selectionne
+        itemParent=item
+        while not (hasattr (itemParent,'getPanel2')) : 
+           itemParent=itemParent.treeParent 
+        if self.tree.node_selected != itemParent : 
+             item.setExpanded(False)
+             return
+
+        itemParent=item
+        item.setPlie()
         item.plieToutEtReaffiche()
 
     def handleExpandedItem(self,item):
@@ -132,7 +135,7 @@ class JDCTree( QTreeWidget ):
 
     def handleOnItem(self,item,int):
         #if (len(self.selectedIndexes())!=2): return
-        print "je passe dans handleOnItem"
+        #print "je passe dans handleOnItem pour ", self.item.nom
         self.inhibeExpand == True 
         self.itemCourrant=item
         itemParent=item
@@ -140,14 +143,13 @@ class JDCTree( QTreeWidget ):
         while not (hasattr (itemParent,'getPanel2')) : 
            if itemParent.plie==True : itemParent.setDeplie()
            itemParent=itemParent.treeParent 
-        #print itemParent
+        #print itemParent.item.nom
         #print itemParent.fenetre
         #print self.editor.afficheCommandesPliees
         if itemParent.fenetre != self.editor.fenetreCentraleAffichee : 
-            #print self.editor.afficheCommandesPliees
             if self.editor.afficheCommandesPliees : itemParent.plieToutEtReaffiche()
             else :                                  itemParent.affichePanneau()
-        if itemParent!=item : item.fenetre.rendVisible()
+        if itemParent!=item and item.fenetre != None: item.fenetre.rendVisible()
         #try :
         if 1:
            fr = item.item.get_fr()
@@ -171,6 +173,7 @@ PARAMETERS  = "PARAMETRE"
 class JDCNode(QTreeWidgetItem):
     def __init__( self, treeParent, item):
         #print "creation d'un noeud : ", item, " ",item.nom,"", treeParent, self
+        #print "creation d'un noeud : ", item.nom
         self.a=0
         self.item        = item
         self.vraiParent  = treeParent
@@ -187,6 +190,7 @@ class JDCNode(QTreeWidgetItem):
         elif (isinstance(self.item,compoparam.PARAMTreeItem)) : name=self.appliEficas.trUtf8(str(item.GetLabelText()[0]))
         else:   name  = self.appliEficas.trUtf8(str(tr( item.nom))+" :")
         value = self.appliEficas.trUtf8(str( item.GetText() ) )
 
         mesColonnes=QStringList()
         if self.editor.enteteQTree=='complet': mesColonnes <<  name << value
@@ -198,13 +202,13 @@ class JDCNode(QTreeWidgetItem):
         else :
             self.plie        = False
             self.appartientAUnNoeudPlie = False
-        #print "self.plie", self.plie
-        #print "self.appartientAUnNoeudPlie", self.appartientAUnNoeudPlie
         #print self.treeParent
 
         ajoutAuParentduNoeud=0
         from InterfaceQT4 import compobloc
-        while (isinstance(self.treeParent,compobloc.Node)) :
+        from InterfaceQT4 import compomclist
+        while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) : 
+        #while (isinstance(self.treeParent,compobloc.Node)) :
               self.treeParent=self.treeParent.treeParent
               ajoutAuParentduNoeud=1
         if ajoutAuParentduNoeud :
@@ -212,7 +216,8 @@ class JDCNode(QTreeWidgetItem):
            self.treeParent.childrenIssusDesBlocs.append(self)
         while (isinstance(self.treeParent,compobloc.Node)) : self.treeParent=self.treeParent.treeParent
 
-        if isinstance(self,compobloc.Node) : 
+        #if isinstance(self,compobloc.Node) : 
+        if (isinstance(self,compobloc.Node) or ( isinstance(self,compomclist.Node) and self.item.isMCList())) : 
            QTreeWidgetItem.__init__(self,None,mesColonnes)
         else :
            QTreeWidgetItem.__init__(self,self.treeParent,mesColonnes)
@@ -236,7 +241,9 @@ class JDCNode(QTreeWidgetItem):
         self.state=""
         self.fenetre=None
         try :
-          if self.item.getObject().isBLOC() : self.setExpanded(True) 
+          if self.item.getObject().isBLOC() : 
+                self.setExpanded(True) 
+                self.plie=False
         except :
           pass
 
@@ -248,19 +255,18 @@ class JDCNode(QTreeWidgetItem):
         
         listeExpanded=[]
         for item in self.childrenComplete :
-            #try :
-            #  print "              je detruis ",  item.item.GetLabelText() ," parent : ", item.treeParent.item.GetLabelText()
-            #except :
-            #  print "mot clef fact"
-            if item.isExpanded():
-               if self.childrenComplete.index(item) < posInsertion :
-                  listeExpanded.append(self.childrenComplete.index(item))
-               else :
-                  listeExpanded.append( self.childrenComplete.index(item) +1)
+            #print dir(item)
+            #if item.isExpanded():
+            #   if self.childrenComplete.index(item) < posInsertion :
+            #      listeExpanded.append(self.childrenComplete.index(item))
+            #      print dir(item.item )
+            #   else :
+            #      listeExpanded.append( self.childrenComplete.index(item) +1)
             self.detruit_les_noeuds_issus_de_blocs(item)
             parent=item.treeParent
             parent.removeChild(item)
 
+        #print listeExpanded
         self.children = []
         self.childrenComplete = []
         sublist = self.item._GetSubList()
@@ -269,13 +275,15 @@ class JDCNode(QTreeWidgetItem):
             nouvelItem=item.itemNode(self,item)
             self.children.append(nouvelItem)
             #print "         J ajoute ", nouvelItem ,nouvelItem.item.GetLabelText(),"dans" ,self.item.GetLabelText()
+            #print item
             #if ind in listeExpanded : nouvelItem.setExpanded(1)
  
             #if ind in listeExpanded : print "plie=0"
             #else                  : print "plie=1"
             #if ind in listeExpanded : nouvelItem.plie=0
             #else                  : nouvelItem.plie=1
-            ind=ind+1
+            #ind=ind+1
+
         #print "*********** fin build_children ",self.item, self.item.GetLabelText()
         
     def chercheNoeudCorrespondant(self,objSimp):
@@ -285,22 +293,25 @@ class JDCNode(QTreeWidgetItem):
         return None
 
     def affichePanneau(self) :
-        print "dans affichePanneau appel getPanel2", self.item.GetLabelText()
+        #print "dans affichePanneau appel getPanel2", self.item.GetLabelText()
         if self.item.isactif(): 
            itemParent=self
+           #print self
+           #print self.getPanel2
            while not (hasattr (itemParent,'getPanel2')) : 
                 itemParent=itemParent.treeParent 
            if itemParent!=self : 
               itemParent.affichePanneau()
               return
+           #print self.getPanel2
            self.fenetre=self.getPanel2()
         else:
             from monInactifPanel import PanelInactif
             self.fenetre = PanelInactif(self,self.editor)
          
         self.editor.widgetCentraleLayout.addWidget(self.fenetre)
-        print "widgetCentraleLayout = ", self.editor.widgetCentraleLayout
-        print "nouvelle fenetre ", self.fenetre, " associee a ", self
+        #print "widgetCentraleLayout = ", self.editor.widgetCentraleLayout
+        #print "nouvelle fenetre ", self.fenetre, " associee a ", self
 
         self.editor.anciennefenetre=self.editor.fenetreCentraleAffichee
         #print "ancienne fenetre ", self.editor.anciennefenetre
@@ -377,11 +388,10 @@ class JDCNode(QTreeWidgetItem):
         Ajoute un parametre a l'interieur du JDC :
         """
         self.editor.init_modif()
-        if after:
-            pos = 'after'
-        else:
-            pos = 'before'
-        return self.append_brother( PARAMETERS, pos )
+        if after: pos = 'after'
+        else: pos = 'before'
+        child=self.append_brother( PARAMETERS, pos )
+        return  child
     
     
     def select( self ):
@@ -389,6 +399,7 @@ class JDCNode(QTreeWidgetItem):
         Rend le noeud courant (self) selectionne et deselectionne
         tous les autres
         """        
+        #print "je suis sur select"
         for item in self.tree.selectedItems() :
             item.setSelected(0)
         self.setSelected( True )    
@@ -407,6 +418,10 @@ class JDCNode(QTreeWidgetItem):
         Methode externe
         """
         self.editor.init_modif()
+
+        from InterfaceQT4 import compojdc
+        if (isinstance(self.treeParent, compojdc.Node)) and not self.verifiePosition(name,pos)  : return 0
+        
         index = self.treeParent.children.index(self)
         if   pos == 'before': index = index
         elif pos == 'after': index = index +1
@@ -415,6 +430,35 @@ class JDCNode(QTreeWidgetItem):
             return 0
         return self.treeParent.append_child(name,pos=index,plier=plier)
 
+    def verifiePosition(self,name,pos,aLaRacine=False):
+        if name not in self.editor.Classement_Commandes_Ds_Arbre : return True
+        indexName=self.editor.Classement_Commandes_Ds_Arbre.index(name)
+
+        etapes=self.item.get_jdc().etapes
+        if etapes == [] : return True
+
+        if aLaRacine == False :indexOu=etapes.index(self.item.object)
+        else : indexOu=0
+
+        if pos=="after" : indexOu = indexOu+1
+        for e in etapes[:indexOu] :
+            nom=e.nom
+            if nom not in self.editor.Classement_Commandes_Ds_Arbre : continue
+            indexEtape=self.editor.Classement_Commandes_Ds_Arbre.index(nom)
+            if indexEtape > indexName :
+               comment=tr('le mot clef ')+name+tr(' doit etre insere avant ')+nom
+               QMessageBox.information( None,tr('insertion impossible'),comment, )
+               return False
+        for e in etapes[indexOu:] :
+            nom=e.nom
+            if nom not in self.editor.Classement_Commandes_Ds_Arbre : continue
+            indexEtape=self.editor.Classement_Commandes_Ds_Arbre.index(nom)
+            if indexEtape < indexName :
+               comment=tr('le mot clef ')+name+tr(' doit etre insere apres ')+nom
+               QMessageBox.information( None,tr('insertion impossible'),comment, )
+               return False
+        return True
+
     def append_child(self,name,pos=None,plier=False):
         """
            Methode pour ajouter un objet fils a l'objet associe au noeud self.
@@ -422,7 +466,9 @@ class JDCNode(QTreeWidgetItem):
            ou en position intermediaire.
            Si pos vaut None, on le place a la position du catalogue.
         """
-        print "************** append_child ",self.item.GetLabelText(), plier
+        #print "************** append_child ",self.item.GetLabelText(), plier
+
+         
         self.editor.init_modif()
         if pos == 'first':
             index = 0
@@ -438,6 +484,12 @@ class JDCNode(QTreeWidgetItem):
             index = self.item.get_index_child(name.nom)
         else:
             index = self.item.get_index_child(name)
+
+        # si on essaye d inserer a la racine
+        if (isinstance(self.treeParent,JDCTree) and index==0) :
+           verifiePosition=self.verifiePosition(name,'first',aLaRacine=True)
+           if not verifiePosition : return 0
+
         self.tree.inhibeExpand=True
         obj=self.item.additem(name,index) #CS_pbruno emet le signal 'add'
         if obj is None:obj=0
@@ -466,7 +518,7 @@ class JDCNode(QTreeWidgetItem):
            else             : child.setDeplie() 
         except :
            child=self.children[index]
-           print "dans le except"
+           #print "dans le except"
         self.tree.inhibeExpand=False
         return child
 
@@ -498,7 +550,7 @@ class JDCNode(QTreeWidgetItem):
            toselect.affichePanneau()
         else :
            if self.treeParent.fenetre== None : return
-           print "J appelle reaffiche de browser apres delete"
+           #print "J appelle reaffiche de browser apres delete"
            self.treeParent.fenetre.reaffiche(toselect)
 
     def deleteMultiple(self,liste=()):
@@ -540,9 +592,8 @@ class JDCNode(QTreeWidgetItem):
     def onValid(self):        
 
         #print "onValid pour ", self.item.nom
-        if hasattr(self,'fenetre') and self.fenetre: 
-           self.fenetre.setValide()
-        if self.item.nom == "VARIABLE" and self.item.isvalid():
+        if hasattr(self,'fenetre') and self.fenetre: self.fenetre.setValide()
+        if (self.item.nom == "VARIABLE" or self.item.nom == "DISTRIBUTION") and self.item.isvalid():
            self.item.jdc.recalcule_etat_correlation()
         if hasattr(self.item,'forceRecalcul'):
            self.forceRecalculChildren(self.item.forceRecalcul)
@@ -556,7 +607,7 @@ class JDCNode(QTreeWidgetItem):
         #print "onAdd pour ", self.item.nom
         self.editor.init_modif()
         self.update_nodes()
-        print "dans onAdd" ,self.item 
+        #print "dans onAdd" ,self.item 
         # PN -- non necessaire si item=jdc
         if hasattr(self.item,'jdc'): self.item.jdc.aReafficher=True
  
@@ -698,9 +749,12 @@ class JDCNode(QTreeWidgetItem):
 
 
     def plieToutEtReaffiche(self):
-        print "je suis dans plieToutEtReaffiche", self.item.get_nom()
+        #print "je suis dans plieToutEtReaffiche", self.item.get_nom()
         self.editor.deplier = False
         for item in self.children :
+            # il ne faut pas plier les blocs 
+            from InterfaceQT4 import compobloc
+            if (isinstance(item,compobloc.Node)) : continue
             item.setPlie()
         self.affichePanneau()
 
@@ -712,41 +766,51 @@ class JDCNode(QTreeWidgetItem):
 
     def setPlie(self):
         #print "je mets inhibeExpand a true dans setPlie"
-        print "je suis dans plieTout", self.item.get_nom()
+        #print "je suis dans plieTout", self.item.get_nom()
+        import compojdc
+        if self.fenetre == self.editor.fenetreCentraleAffichee  and isinstance(self.treeParent,compojdc.Node): 
+           return
         self.tree.inhibeExpand=True
         self.tree.collapseItem(self)
         self.setPlieChildren()
+        self.tree.inhibeExpand=False
+        #print "je mets inhibeExpand a false dans setPlie"
 
 
         # on ne plie pas au niveau 1
-        #if not(isinstance(self.treeParent,compojdc.Node)) : 
-        #   self.plie=True
-        #else :
         #   self.plie=False
         #   for item in self.children :
         #       item.appartientAUnNoeudPlie=False
-        #self.tree.inhibeExpand=False
-        #print "je mets inhibeExpand a false dans setPlie"
 
     def setPlieChildren(self):
         self.plie=True
         for c in self.children :
             c.setPlieChildren()
-            print "dans setPlieChildren appartientAUnNoeudPlie=True ", c, c.item.GetLabelText()[0]
+            #print "dans setPlieChildren appartientAUnNoeudPlie=True ", c, c.item.GetLabelText()[0]
             c.appartientAUnNoeudPlie=True
             c.plie=True
-            c.setExpanded(True)
+            c.setExpanded(False)
 
-        # Pour les blocs
+        # Pour les blocs et les motcles list
         # on affiche un niveau de plus
         from InterfaceQT4 import compobloc
-        if isinstance(self,compobloc.Node) : 
+        from InterfaceQT4 import compomclist
+        if (isinstance(self,compobloc.Node) or ( isinstance(self,compomclist.Node) and self.item.isMCList())) : 
             niveauPere=self.treeParent
-            while (isinstance(niveauPere,compobloc.Node)):
-               niveauPere=self.niveauPere.treeParent
+            while (isinstance(niveauPere,compobloc.Node) or (isinstance(niveauPere,compomclist.Node) and niveauPere.item.isMCList())) : 
+               niveauPere=niveauPere.treeParent
             for c in self.children :
                 c.appartientAUnNoeudPlie=niveauPere.appartientAUnNoeudPlie
-            
+                c.setExpanded(False)
+
+        # on affiche un niveau de plus
+        #if isinstance(self,compomclist.Node)  : 
+        #if isinstance(self,compobloc.Node)  : 
+        #    niveauPere=self.treeParent
+        #    while (isinstance(niveauPere,compobloc.Node)):
+        #       niveauPere=niveauPere.treeParent
+        #    for c in self.children :
+        #        c.appartientAUnNoeudPlie=niveauPere.appartientAUnNoeudPlie
 
     def setDeplie(self):
         #print "je mets inhibeExpand a true dans setDeplie"
@@ -755,13 +819,13 @@ class JDCNode(QTreeWidgetItem):
         self.tree.expandItem(self)
         self.setDeplieChildren()
         self.tree.inhibeExpand=False
-        print "je mets inhibeExpand a false dans setDePlie"
+        #print "je mets inhibeExpand a false dans setDePlie"
 
     def setDeplieChildren(self):
-        print "dans setDeplieChildren appartientAUnNoeudPlie=False ", self.item.GetLabelText()
+        #print "dans setDeplieChildren appartientAUnNoeudPlie=False ", self.item.GetLabelText()
         for c in self.children :
             c.setDeplieChildren()
-            print "dans setDeplieChildren appartientAUnNoeudPlie=False ", c.item.GetLabelText()
+            #print "dans setDeplieChildren appartientAUnNoeudPlie=False ", c.item.GetLabelText()
             c.appartientAUnNoeudPlie=False
             c.setExpanded(True)
             c.plie=False