]> SALOME platform Git repositories - tools/eficas.git/blobdiff - Editeur/compooper.py
Salome HOME
PN
[tools/eficas.git] / Editeur / compooper.py
index eceb5cf8b635c05c07cc33bbda02164134bb73f9..945baceeac30a997b350e73e74c2f285267682db 100644 (file)
@@ -1,12 +1,26 @@
-#@ MODIF compooper Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
+# -*- coding: utf-8 -*-
 #            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.
+#
+#
 # ======================================================================
 from Tkinter import *
 import Pmw
+import traceback
 import Objecttreeitem
 import panels
 import fontes
@@ -23,9 +37,10 @@ class OPERPanel(panels.OngletPanel):
     nb.add('Commentaire',tab_text='Paramètre/Commentaire')
     panneau=Pmw.PanedWidget(nb.page("Mocles"),
                             orient='horizontal')
-    panneau.add('left',min=0.4,max=0.6,size=0.5)
-    panneau.add('right',min=0.4,max=0.6,size=0.5)
+    panneau.add('left',min=0.4,max=0.60,size=0.50)
+    panneau.add('right',min=0.4,max=0.60,size=0.50)
     panneau.pack(expand=1,fill='both')
+    panneau.setnaturalsize()
     self.makeCommandePage(nb.page("Commande"))
     self.makeConceptPage_oper(nb.page("Concept"))
     self.makeMoclesPage(panneau.pane('left'))
@@ -33,14 +48,18 @@ class OPERPanel(panels.OngletPanel):
     #self.makeCommentairePage(nb.page("Commentaire"))
     self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
     nb.tab('Mocles').focus_set()
-    nb.setnaturalsize()
+    self.nb.setnaturalsize()
+    self.enlevebind()
+    self.creebind()
     self.affiche()
 
   def makeConceptPage_oper(self,page):
       """ Crée la page de saisie du nom du concept """
       if self.node.item.is_reentrant():
+          # commande obligatoirement reentrante
           self.makeConceptPage_reentrant(page)
       else:
+          # commande non reentrante ou facultativement reentrante
           self.makeConceptPage(page)
 
   def makeConceptPage_reentrant(self,page):
@@ -68,7 +87,8 @@ class OPERPanel(panels.OngletPanel):
           choix = self.listbox.getcurselection()[0]
           self.valeur_choisie.set(choix)
       except:
-          pass
+          traceback.print_exc()
+         
 
   def choose_valeur_from_list(self,command):
       try:
@@ -76,10 +96,52 @@ class OPERPanel(panels.OngletPanel):
           self.valeur_choisie.set(choix)
           apply(command,(),{})
       except:
-          pass
+          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
@@ -89,13 +151,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 :
@@ -125,30 +186,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:
@@ -161,13 +216,37 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
       return keys
 
   def GetSubList(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
+      """
+         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 isvalid(self):
       return self.object.isvalid()
@@ -178,18 +257,20 @@ 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 """
-      return self.object.nomme_sd(nom)
+      oldnom=""
+      if self.object.sd != None :
+         oldnom=self.object.sd.nom
+      test,mess= self.object.nomme_sd(nom)
+      if test:self.object.parent.reset_context()
+      if (test and self.appli.dict_reels.has_key(oldnom) ):
+              self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
+      return test,mess
 
   def is_reentrant(self):
       return self.object.is_reentrant()
@@ -216,6 +297,12 @@ 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)
+      parent=self.object.parent
+      self.object.parent.suppentite(self.object)
+      parent.addentite(commande_comment,pos)
+
       return commande_comment
 
 import Accas