Salome HOME
CCAR: mise en coherence de Build_sd de mACRO_ETAPE avec celle de ETAPE
[tools/eficas.git] / Editeur / treewidget.py
index a0d6554eacc6172e053c382649c465fd5ada1c63..fe6e4d2847c66c9069eaf398cde5f50fba70e1d3 100644 (file)
@@ -1,11 +1,23 @@
-#@ MODIF treewidget Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
 # ======================================================================
-import os,sys,string,re,types
+import os,sys,string,re,types,traceback
 from Tkinter import *
 
 
@@ -13,8 +25,8 @@ import fontes
 import images
 
 #
-__version__="$Name: V1_1p1 $"
-__Id__="$Id: treewidget.py,v 1.1.1.1 2001/12/04 15:38:23 eficas Exp $"
+__version__="$Name:  $"
+__Id__="$Id: treewidget.py,v 1.6 2002/09/09 10:39:06 eficas Exp $"
 #
 
 Fonte_Standard = fontes.standard
@@ -468,6 +480,7 @@ class Node :
         try:
             self.canvas.addtag_overlapping('move',bbox1[0],self.y +10,bbox1[2],bbox1[3])
         except:
+           print "Erreur dans move :"
             print self
             print self.item
             print self.item.object
@@ -493,6 +506,7 @@ class Node :
             try:
                 child.trace_ligne()
             except:
+               print "Erreur dans trace_ligne :"
                 print child
                 print child.item.object
 
@@ -521,21 +535,23 @@ class Node :
         
     def full_creation(self,name,pos=None):
         """
-        Interface avec ACCAS : création de l'objet de nom name et
-        du noeud associé. Retourne le noeud fils ainsi créé
+            Interface avec ACCAS : création de l'objet de nom name et
+            du noeud associé. Retourne le noeud fils ainsi créé
         """
         item = self.item.additem(name,pos)
         if item == None or item == 0:
             # impossible d'ajouter le noeud de nom : name
             return 0
         nature = item.get_nature()
-        #if nature =="COMMANDE" or nature == "OPERATEUR" or nature == "PROCEDURE":
         if nature in ("COMMANDE","OPERATEUR","PROCEDURE","COMMENTAIRE",
                       "PARAMETRE","COMMANDE_COMMENTARISEE","PARAMETRE_EVAL"):
             # on veut ajouter une commande ou un commentaire ou un paramètre
             # il ne faut pas rechercher un même objet déjà existant
             # à modifier : il faut tester l'attribut 'repetable' 
             enfant = None
+        elif self.item.object.isMCList():
+            # Dans ce cas on ne fait pas de remplacement. On ne cherche pas un objet de meme nom
+            enfant=None
         else :
             enfant = self.get_node_fils(item.get_nom())
         if enfant :
@@ -611,6 +627,9 @@ class Node :
             # on donne la position depuis l'extérieur
             # (appel de append_child par append_brother par exemple)
             index = pos
+        elif type(pos) == types.InstanceType:
+            # pos est un item. Il faut inserer name apres pos
+            index = self.item.get_index(pos) +1
         else :
             if type(name) == types.InstanceType:
                 index = self.item.get_index_child(name.nom)
@@ -676,6 +695,7 @@ class Node :
                 print 'Erreur dans la destruction de ',self.item.get_nom(),' dans delete'
             nbnew = pere.get_nb_children()
         pere.redraw(nbnew-nbold)
+       pere.select()
 
     def copynode(self,node,pos) :
         """ node est le noeud à copier à la position pos de self ( = parent de node) """
@@ -690,15 +710,16 @@ class Node :
             try :
                 child.item.object.mc_liste = objet_copie.mc_liste
             except:
-                pass
+                traceback.print_exc()
     #--------------------------------------------------------------
     # Méthodes de vérification du contexte et de validité du noeud
     #--------------------------------------------------------------
-    def traite_mclist(self):
+    def traite_mclist_OLD(self):
         """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide
             ou réduite à un seul élément suite à une destruction
         """
         # self représente une MCList
+       print "on passe par traite_mclist ",len(self.item)
         if len(self.item) == 0 :
             # la liste est vide : il faut la supprimer
             self.delete()
@@ -709,6 +730,8 @@ class Node :
             noeud = self.children[0]
             if self.parent.delete_child(self):
                 self.parent.append_node_child(noeud.item,pos=index,verif='non')
+            else:
+               print "destruction de self impossible !"
             #if self.parent.delete_child(self):
             #    self.parent.copynode(self.children[0],index)
             #else :
@@ -716,6 +739,26 @@ class Node :
         else :
             return
 
+    def traite_mclist(self):
+        """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide
+            ou réduite à un seul élément suite à une destruction
+        """
+        # self représente une MCList
+        if len(self.item) == 0 :
+            # la liste est vide : il faut la supprimer
+            self.delete()
+        elif len(self.item) == 1:
+            # il ne reste plus qu'un élément dans la liste
+            # il faut supprimer la liste et créer directement l'objet
+            index = self.parent.children.index(self)
+            noeud = self.children[0]
+           noeud.parent = self.parent
+           self.parent.delete_node_child(self)
+            self.parent.item.replace_child(self.item,noeud.item)
+           self.parent.children.insert(index,noeud)
+        else :
+            return
+           
     def verif_all(self):
         self.verif_all_children()