Salome HOME
CCAR: mise a jour proc distrib
[tools/eficas.git] / Editeur / jdcdisplay.py
index d85ab06ae9fa1a5ff29fda315af99b7e63da2d7d..05f591ecefc63e1dde68e4907c0c3a5b7c7bf013 100644 (file)
@@ -1,3 +1,22 @@
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# 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.
+#
+#
+# ======================================================================
 """
    Ce module contient la classe JDCDISPLAY qui réalise l'affichage
    du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
@@ -25,6 +44,7 @@ class JDCDISPLAY:
       self.jdc=jdc
       self.nom_jdc=nom_jdc
       self.fichier=None
+      self.panel_courant=None
 
       if not appli:
          class Appli:
@@ -52,8 +72,8 @@ class JDCDISPLAY:
       self.modified='n'
 
       self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
-      self.pane.add('treebrowser',min=0.5)
-      self.pane.add('selected',min=0.5)
+      self.pane.add('treebrowser',min=0.4,size=0.5)
+      self.pane.add('selected',min=0.4)
       self.pane.pack(expand=1,fill='both')
       self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
                  self.appli,self.select_node)
@@ -78,13 +98,32 @@ class JDCDISPLAY:
          Lance la génération du panneau contextuel de l'objet sélectionné 
          dans l'arbre
       """
+      if self.panel_courant:
+          # On detruit le panneau
+          self.panel_courant.destroy()
+          o=self.panel_courant
+          self.panel_courant=None
+          # Mettre à 1 pour verifier les cycles entre objets
+          # pour les panneaux
+          withCyclops=0
+          if withCyclops:
+             from Misc import Cyclops
+             z = Cyclops.CycleFinder()
+             z.register(o)
+             del o
+             z.find_cycles()
+             z.show_stats()
+             z.show_cycles()
+
+
       if node.item.isactif():
           if hasattr(node.item,"panel"):
-              return node.item.panel(self,self.pane.pane('selected'),node)
+              self.panel_courant=node.item.panel(self,self.pane.pane('selected'),node)
           else:
               raise Exception("Le noeud sélectionné n'a pas de panel associé")
       else:
-          return panels.Panel_Inactif(self,self.pane.pane('selected'),node)
+          self.panel_courant = panels.Panel_Inactif(self,self.pane.pane('selected'),node)
+      return self.panel_courant
 
    def init_modif(self):
       """
@@ -148,7 +187,7 @@ class JDCDISPLAY:
       Ne permet que la copie d'objets de type Commande ou MCF
       """
       objet_a_copier = self.appli.noeud_a_editer.item.get_copie_objet()
-      if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE'):
+      if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE','FORM_ETAPE'):
           self.doPaste_Commande(objet_a_copier)
       elif objet_a_copier.__class__.__name__ == "MCFACT":
           self.doPaste_MCF(objet_a_copier)
@@ -159,14 +198,16 @@ class JDCDISPLAY:
 
    def doPaste_Commande(self,objet_a_copier):
       """
-      Réalise la copie de l'objet passé en argument qui est nécessairement une commande
+          Réalise la copie de l'objet passé en argument qui est nécessairement 
+          une commande
       """
       # il faut vérifier que le noeud sélectionné (noeud courant) est bien
       # une commande ou un JDC sinon la copie est impossible ...
       if self.node_selected.item.isCommande() :
           child = self.node_selected.append_brother(objet_a_copier,retour='oui')
       elif self.node_selected.item.isJdc() :
-          child = self.node_selected.append_child(objet_a_copier,retour='oui')
+          child = self.node_selected.append_child(objet_a_copier,pos='first',
+                                                     retour='oui')
       else:
           showinfo("Copie impossible",
                    "Vous ne pouvez coller la commande copiée à ce niveau de l'arborescence !")
@@ -195,10 +236,17 @@ class JDCDISPLAY:
           child = self.node_selected.append_child(objet_a_copier,retour='oui')
       elif self.node_selected.item.isMCList() :
           # le noeud courant est une MCList
-          child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
+          child = self.node_selected.parent.append_child(objet_a_copier,pos='first',retour='oui')
       elif self.node_selected.item.isMCFact():
           # le noeud courant est un MCFACT
-          child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
+          if self.node_selected.parent.item.isMCList():
+             # le noeud selectionne est un MCFACT dans une MCList
+             child = self.node_selected.parent.append_child(objet_a_copier,
+                                                            pos=self.node_selected.item,
+                                                            retour='oui')
+          else:
+             # le noeud MCFACT selectionne n'est pas dans une MCList
+             child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
       else:
           showinfo("Copie impossible",
                    "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")