]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/N_UserASSD.py
Salome HOME
chgt Copyrigth
[tools/eficas.git] / Noyau / N_UserASSD.py
1 # coding=utf-8
2 # Copyright (C) 2007-2021   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19
20 """
21
22 """
23
24 from __future__ import absolute_import
25 from __future__ import print_function
26 try :
27   from builtins import object
28 except : pass
29 import traceback
30 import sys
31
32 from .N_ASSD import ASSD
33
34 class UserASSD(ASSD):
35     """
36        Classe de base pour definir des types de structures de donnees definie par 
37        l utilisateur
38        equivalent d un concept ASSD pour un SIMP ou un FACT
39        Attention : le parent est a None au debut  et non le MC createur que l on ne connait pas
40        Lorsqu on ecrit le jdc, n ecrit nom=UserASSD()
41        le parent est le SIMP qui cree l objet
42        a la lecture si la classe commence par un majuscule on fait le boulot dans MCSIMP, sinon dans
43        l init de parametre car le parsing considere qu on a un parametre
44     """
45
46     def __init__(self,nom='sansNom'):
47        self.nom    = nom
48        self.jdc    = CONTEXT.getCurrentJdC()
49        self.parent = None 
50        self.initialiseValeur()
51        self.utilisePar = set()
52        if self.nom  != 'sansNom' : self.id = self.jdc.regSD(self)
53        else : self.id = None
54        self.ptr_sdj   = None
55
56
57     def initialiseParent(self, parent):
58        #print ('je passe initialiseParent pour : ', self, parent)
59        self.parent= parent
60
61     def initialiseNom(self,nom):
62        #print ('je passe initialiseNom pour : ', self, nom)
63        for (i,j)  in self.jdc.sdsDict.items() :
64           if j == self : 
65              del(self.jdc.sdsDict[i])
66        self.jdc.sdsDict[nom]=self
67        self.nom=nom
68        if self.nom != 'sansNom' and self.id ==None : self.id = self.jdc.regSD(self)
69
70     def initialiseValeur(self,valeur=None):
71        self.valeur=valeur
72
73     def ajoutUtilisePar(self,mc):
74        self.utilisePar.add(mc)
75
76     def enleveUtilisePar(self,mc):
77        try : self.utilisePar.remove(mc)
78        except : pass
79
80     def renomme(self,nouveauNom):
81        self.jdc.delConcept(self.nom)
82        self.jdc.sdsDict[nouveauNom] = self
83        self.setName(nouveauNom)
84        #print ('je suis dans renomme',nouveauNom, self.nom)
85        #print (self.utilisePar)
86        for mc in (self.utilisePar):
87            mc.demandeRedessine()
88        
89
90     def deleteReference(self):
91        print ('dans deleteReference')
92        for MC in self.utilisePar : 
93            # le delete est appele en cascade par toute la hierachie
94            # du mcsimp (au cas ou on detruise le fact ou le proc)
95            # du coup pas beau
96            try :
97               if type(MC.valeur) in (list,tuple): 
98                  MC.valeur=list(MC.valeur)
99                  while MC in MC.valeur: MC.valeur.remove(self)
100                  if MC.valeur == [] : MC.Valeur = None
101               else : MC.valeur=None
102               MC.state='changed'
103               MC.isValid()
104               #MC.demandeRedessine()
105               self.jdc.delConcept(self.nom)
106            except :
107               pass
108
109     def getEficasAttribut(self, attribut):
110        #print ('je suis dans getEficasAttr', attribut)
111        if self.parent == None : return None
112        #print ('apres if')
113        # parent est le SIMP donc c est bien parent.parent
114        try : 
115           valeur = self.parent.parent.getMocle(attribut)
116        except :
117           valeur = None
118        #print (valeur)
119        return valeur
120        
121         
122     def supprime(self):
123         self.deleteReference()
124         ASSD.supprime(self)
125