Salome HOME
CCAR: modifications pour :
[tools/eficas.git] / Editeur / compooper.py
index 154aa2abf98d5a70067e4091ce1c9e930ff2e95c..734fa39516211b8359b1d5e755e1a66350d141f8 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -92,8 +93,50 @@ class OPERPanel(panels.OngletPanel):
       except:
           traceback.print_exc()
 
+import treewidget
+class Node(treewidget.Node):
+    def doPaste(self,node_selected):
+        """
+            Déclenche la copie de l'objet item avec pour cible
+            l'objet passé en argument : node_selected
+        """
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPaste_Commande(objet_a_copier)
+        return child
+
+    def doPaste_Commande(self,objet_a_copier):
+        """
+          Réalise la copie de l'objet passé en argument qui est nécessairement
+          une commande
+        """
+        parent=self.parent
+        #child = parent.item.append_child(objet_a_copier,self.item.getObject())
+        child = self.append_brother(objet_a_copier,retour='oui')
+        #if child is None:return 0
+        return child
+
+    def doPaste_MCF(self,objet_a_copier):
+        """
+           Réalise la copie de l'objet passé en argument (objet_a_copier)
+           Il s'agit forcément d'un mot clé facteur
+        """
+        child = self.append_child(objet_a_copier,pos='first',retour='oui')
+        return child
+
+
 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
+  """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
+      Accas. Elle leur permet d'etre affichés comme des noeuds
+      d'un arbre graphique.
+      Cette classe a entre autres deux attributs importants :
+        - _object qui est un pointeur vers l'objet du noyau
+        - object qui pointe vers l'objet auquel sont délégués les
+          appels de méthode et les accès aux attributs
+      Dans le cas d'une ETAPE, _object et object pointent vers le 
+      meme objet.
+  """
   panel = OPERPanel
+  itemNode=Node
   
   def IsExpandable(self):
       return 1
@@ -103,13 +146,12 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
       Retourne le nom de l'icône à afficher dans l'arbre
       Ce nom dépend de la validité de l'objet
       """
-      if self.object.isactif():
-        if self.object.isvalid():
-          return "ast-green-square"
-        else:
-          return "ast-red-square"
+      if not self.object.isactif():
+         return "ast-white-square"
+      elif self.object.isvalid():
+         return "ast-green-square"
       else:
-        return "ast-white-square"
+         return "ast-red-square"
 
   def GetLabelText(self):
       """ Retourne 3 valeurs :
@@ -139,30 +181,24 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
          return ""
 
   def additem(self,name,pos):
-      if isinstance(name,Objecttreeitem.ObjectTreeItem) :
-          mcent = self.object.addentite(name.object,pos)
-      else :
-          mcent = self.object.addentite(name,pos)
-      self.expandable=1
-      if mcent == 0 :
-          # on ne peut ajouter l'élément de nom name
-          return 0
-      def setfunction(value, object=mcent):
-          object.setval(value)
-      item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
-      return item
+      #print "compooper.additem",name,pos
+      mcent = self._object.addentite(name,pos)
+      return mcent
 
   def suppitem(self,item) :
       # item : item du MOCLE de l'ETAPE à supprimer
-      # item.object = MCSIMP, MCFACT, MCBLOC ou MCList 
-      if item.object.isoblig() :
+      # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
+      itemobject=item.getObject()
+      if itemobject.isoblig() :
           self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
           return 0
-      else :
-          self.object.suppentite(item.object)
-          message = "Mot-clé " + item.object.nom + " supprimé"
+      if self.object.suppentite(itemobject):
+          message = "Mot-clé " + itemobject.nom + " supprimé"
           self.appli.affiche_infos(message)
           return 1
+      else :
+          self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+          return 0
 
   def GetText(self):
       try:
@@ -175,13 +211,68 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
       return keys
 
   def GetSubList(self):
+      """
+         Reactualise la liste des items fils stockes dans self.sublist
+      """
+      if self.isactif():
+         liste=self.object.mc_liste
+      else:
+         liste=[]
+
+      sublist=[None]*len(liste)
+      # suppression des items lies aux objets disparus
+      for item in self.sublist:
+         old_obj=item.getObject()
+         if old_obj in liste:
+            pos=liste.index(old_obj)
+            sublist[pos]=item
+         else:
+            pass # objets supprimes ignores
+
+      # ajout des items lies aux nouveaux objets
+      pos=0
+      for obj in liste:
+         if sublist[pos] is None:
+            # nouvel objet : on cree un nouvel item
+            def setfunction(value, object=obj):
+                object.setval(value)
+            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+            sublist[pos]=item
+         pos=pos+1
+
+      self.sublist=sublist
+      return self.sublist
+
+  def GetSubList_BAK(self):
+      if self.isactif():
+         liste=self.object.mc_liste
+      else:
+         liste=[]
+
       sublist=[]
-      for obj in self.object.mc_liste:
-        def setfunction(value, object=obj):
-          object.setval(value)
-        item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
-        sublist.append(item)
-      return sublist
+      isublist=iter(self.sublist)
+      iliste=iter(liste)
+
+      while(1):
+         old_obj=obj=None
+         for item in isublist:
+            old_obj=item.getObject()
+            if old_obj in liste:break
+
+         for obj in iliste:
+            if obj is old_obj:break
+            # nouvel objet : on cree un nouvel item
+            def setfunction(value, object=obj):
+                object.setval(value)
+            it = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+            sublist.append(it)
+
+         if old_obj is None and obj is None:break
+         if old_obj is obj:
+            sublist.append(item)
+
+      self.sublist=sublist
+      return self.sublist
 
   def isvalid(self):
       return self.object.isvalid()
@@ -192,14 +283,9 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
       """
       return 1
 
-  def isCommande(self):
-      """
-      Retourne 1 si l'objet pointé par self est une Commande, 0 sinon
-      """
-      return 1
-      
-  def verif_condition_bloc(self):
-      return self.object.verif_condition_bloc()
+  def update(self,item):
+      if item.sd and item.sd.nom:
+         self.nomme_sd(item.sd.nom)
 
   def nomme_sd(self,nom):
       """ Lance la méthode de nommage de la SD """
@@ -232,16 +318,48 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
                                              parent=self.object.parent)
       commande_comment.niveau = self.object.niveau
       commande_comment.jdc = commande_comment.parent = self.object.jdc
+
+      pos=self.object.parent.etapes.index(self.object)
+      self.object.parent.suppentite(self.object)
+      self.object.parent.addentite(commande_comment,pos)
+
       return commande_comment
 
+  def additem_BAK(self,name,pos):
+      mcent=self.addentite(name,pos)
+
+      self.expandable=1
+      if mcent == 0 :
+          # on ne peut ajouter l'élément de nom name
+          return 0
+      def setfunction(value, object=mcent):
+          object.setval(value)
+      item = self.make_objecttreeitem(self.appli,mcent.nom + " : ", mcent, setfunction)
+      return item
+
+  def GetSubList_BAK(self):
+      sublist=[]
+      for obj in self.object.mc_liste:
+        def setfunction(value, object=obj):
+          object.setval(value)
+        item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+        sublist.append(item)
+      return sublist
+
+  def verif_condition_bloc_BAK(self):
+      return self.object.verif_condition_bloc()
+
   def replace_child(self,old_item,new_item):
      """
-     Remplace old_item.object par new_item.object dans les fils de self.object
+     Remplace old_item.getObject() par new_item.getObject() dans 
+     les fils de self.object
      """
-     index = self.object.mc_liste.index(old_item.object)
+     raise "OBSOLETE"
+     old_itemobject=old_item.getObject()
+     index = self.object.mc_liste.index(old_itemobject)
      self.object.init_modif()
-     self.object.mc_liste.remove(old_item.object)
-     self.object.mc_liste.insert(index,new_item.object)
+     self.object.mc_liste.remove(old_itemobject)
+     self.object.mc_liste.insert(index,new_item.getObject())
      self.object.fin_modif()
      
 import Accas