Salome HOME
Merge branch 'nouvelEficas' of http://git.forge-pleiade.der.edf.fr/git/eficas into...
[tools/eficas.git] / Ihm / I_MCLIST.py
index 9bde6f8b700381a7dd4babe22532a24d493c1522..56f4ade116d8e161bd8edbd983183050f1303487 100644 (file)
@@ -1,23 +1,27 @@
-#            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.
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2013   EDF R&D
 #
 #
-# 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.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
 #
 #
-# 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.
+# This library 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
+# Lesser General Public License for more details.
 #
 #
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 #
 #
-# ======================================================================
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+import types,traceback
+from Extensions.i18n import tr
+from Extensions.eficas_exception import EficasException
 from copy import copy
 from copy import copy
+import CONNECTOR
 
 class MCList:
   def isMCList(self):
 
 class MCList:
   def isMCList(self):
@@ -46,20 +50,86 @@ class MCList:
       else:
         return 0
 
       else:
         return 0
 
+  def isrepetable(self):
+    """
+       Indique si l'objet est répétable.
+       Retourne 1 si le mot-clé facteur self peut être répété
+       Retourne 0 dans le cas contraire
+    """
+    if self.data[0].definition.max > 1:
+       # marche avec '**'
+       return 1
+    else :
+       return 0
+
   def isoblig(self):
      """
      Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
      """
   def isoblig(self):
      """
      Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
      """
-     return 0
+     return self.data[0].definition.statut=='o'
+  
+  def suppentite(self,obj):
+      """
+        Supprime le mot cle facteur obj de la MCLIST
+      """
+      if obj not in self:
+         return 0
+
+      self.init_modif()
+      self.remove(obj)
+      CONNECTOR.Emit(self,"supp",obj)
+      self.update_condition_bloc()
+      obj.supprime()
+      self.etape.modified()
+      self.fin_modif()
+      return 1
+
+  def addentite(self,obj,pos=None):
+      """
+        Ajoute le mot cle facteur obj a la MCLIST a la position pos
+        Retourne None si l'ajout est impossible
+      """
+      if type(obj)==types.StringType :
+         # on est en mode création d'un motcle
+                  raise EficasException(tr("traitement non-prevu"))
+
+      if not self.ajout_possible():
+         self.jdc.appli.affiche_alerte(tr("Erreur"),
+                                       tr("L'objet %s ne peut pas etre ajoute", obj.nom))
+         return None
+
+      if self.nom != obj.nom:
+         return None
+
+      if obj.isMCList():
+         obj=obj.data[0]
+
+      # Traitement du copier coller seulement 
+      # Les autres cas d'ajout sont traites dans MCFACT
+      self.init_modif()
+      obj.verif_existence_sd()
+      obj.reparent(self.parent)
+      if pos is None:
+         self.append(obj)
+      else:
+         self.insert(pos,obj)
+      CONNECTOR.Emit(self,"add",obj)
+      self.fin_modif()
+      self.update_condition_bloc()
+      return obj
 
   def liste_mc_presents(self):
     return []
 
 
   def liste_mc_presents(self):
     return []
 
+  def update_concept(self,sd):
+    for child in self.data :
+        child.update_concept(sd)
+
   def delete_concept(self,sd):
     """ 
         Inputs :
            - sd=concept detruit
   def delete_concept(self,sd):
     """ 
         Inputs :
            - sd=concept detruit
-        Fonction : Mettre a jour les fils de l objet suite à la disparition 
+        Fonction : Mettre a jour les fils de l objet suite a la disparition 
         du concept sd
         Seuls les mots cles simples MCSIMP font un traitement autre 
         que de transmettre aux fils
         du concept sd
         Seuls les mots cles simples MCSIMP font un traitement autre 
         que de transmettre aux fils
@@ -103,6 +173,22 @@ class MCList:
     # Sans objet pour une liste de mots clés facteurs
     return []
 
     # Sans objet pour une liste de mots clés facteurs
     return []
 
+  def deep_update_condition_bloc(self):
+     """
+        Parcourt l'arborescence des mcobject et realise l'update
+        des blocs conditionnels par appel de la methode update_condition_bloc
+     """
+     #print "deep_update_condition_bloc",self
+     for mcfact in self.data :
+         mcfact.deep_update_condition_bloc()
+
+  def update_condition_bloc(self):
+     """
+        Propage la mise a jour des conditions au parent.
+        Une liste ne fait pas de traitement sur les conditions
+     """
+     if self.parent: self.parent.update_condition_bloc()
+
   def verif_condition_bloc(self):
     """ 
         Evalue les conditions de tous les blocs fils possibles 
   def verif_condition_bloc(self):
     """ 
         Evalue les conditions de tous les blocs fils possibles 
@@ -111,7 +197,7 @@ class MCList:
            - la première contient les noms des blocs à rajouter
            - la seconde contient les noms des blocs à supprimer
     """
            - la première contient les noms des blocs à rajouter
            - la seconde contient les noms des blocs à supprimer
     """
-    # Sans objet pour une liste de mots clés facteurs
+    # Sans objet pour une liste de mots clés facteurs (a voir !!!)
     return [],[]
 
   def init_modif(self):
     return [],[]
 
   def init_modif(self):
@@ -123,6 +209,16 @@ class MCList:
     if self.parent:
       self.parent.init_modif()
 
     if self.parent:
       self.parent.init_modif()
 
+  def fin_modif(self):
+    """
+      Méthode appelée après qu'une modification a été faite afin de déclencher
+      d'éventuels traitements post-modification
+    """
+    #print "fin_modif",self
+    CONNECTOR.Emit(self,"valid")
+    if self.parent:
+      self.parent.fin_modif()
+
   def get_genealogie(self):
      """
          Retourne la liste des noms des ascendants.
   def get_genealogie(self):
      """
          Retourne la liste des noms des ascendants.
@@ -148,7 +244,7 @@ class MCList:
   def verif_existence_sd(self):
      """
         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
   def verif_existence_sd(self):
      """
         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
-       avant étape, sinon enlève la référence à ces concepts
+        avant étape, sinon enlève la référence à ces concepts
      """
      for motcle in self.data :
          motcle.verif_existence_sd()
      """
      for motcle in self.data :
          motcle.verif_existence_sd()
@@ -163,3 +259,25 @@ class MCList:
      except:
         return ''
 
      except:
         return ''
 
+  def normalize(self):
+     """
+        Retourne l'objet normalisé. Une liste est déjà normalisée
+     """
+     return self
+
+  def update_mc_global(self):
+     """
+        Met a jour les mots cles globaux enregistrés dans l'étape parente
+        et dans le jdc parent.
+        Une liste ne peut pas etre globale. Elle se contente de passer
+        la requete a ses fils.
+     """
+     for motcle in self.data :
+         motcle.update_mc_global()
+
+  def delete_mc_global(self):
+     for motcle in self.data :
+         motcle.delete_mc_global()
+
+  #def __del__(self):
+  #   print "__del__",self