2 # Copyright (C) 2007-2013 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 Description des types de base aster
22 version 2 - réécrite pour essayer de simplifier
23 le problème des instances/types et instances/instances
25 le type de base ASBase permet de représenter une structure
26 de donnée. Une instance de ASBase comme attribut d'une classe
27 dérivée de ASBase représente une sous-structure nommée.
29 une instance de ASBase 'libre' représente une instance de la
30 structure de donnée complète.
32 c'est ce comportement qui est capturé dans la classe StructType
35 from basetype import Type
40 """Objet représentant une sous-partie de nom
48 def __init__(self, nomj=None, debut=None, fin=None, just='l', **kwargs):
50 Configure un objet nom
51 nomj : la partie du nom fixée (par ex .TITR) ou '' si non précisée
52 debut, fin : la partie du K24 concernée
53 just : la justification a droite ou a gauche ('l' ou 'r')
54 kwargs : inutilisé, juste par simplicité
57 On utilise cet objet comme attribut d'instance ou de classe.
58 En attribut de classe pour les noms de structure, cela permet
59 de définir la position du nom d'objet dans le nom jeveux, l'attribut
60 nom est alors la valeur du suffixe pour une sous-structure ou None pour
61 une structure principale.
63 super(SDNom, self).__init__(
64 nomj=nomj, debut=debut, fin=fin, just=just, **kwargs)
65 self.update((nomj, debut, fin, just))
68 if self._parent is None or self._parent._parent is None:
69 debut = self.debut or 0
73 # assert self._parent.nomj is self
74 nomparent = self._parent._parent.nomj
76 debut = self.debut or nomparent.fin or len(prefix)
78 nomj = self.nomj or ''
79 nomj = self.just(nomj, fin - debut)
80 prefix = prefix.ljust(24)
81 res = prefix[:debut] + nomj + prefix[fin:]
85 return self.just(self.nomj, self.fin - self.debut).replace(' ', '?')
88 return "<SDNom(%r,%s,%s)>" % (self.nomj, self.debut, self.fin)
90 # On utilise pickle pour les copies, et pickle ne sait pas gérer la
91 # sauvegarde de str.ljust ou str.rjust (c'est une méthode non liée)
93 def __getstate__(self):
94 return (self.nomj, self.debut, self.fin, self.justtype)
96 def __setstate__(self, (nomj, debut, fin, just)):
100 if just == 'l' or just is None:
101 self.just = str.ljust
103 self.just = str.rjust
105 raise ValueError("Justification '%s' invalide" % just)
108 def update(self, (nomj, debut, fin, just)):
111 if self.debut is None:
115 if self.justtype is None and just is not None:
117 self.just = str.ljust
119 self.just = str.rjust
121 raise ValueError("Justification '%s' invalide" % just)
124 def reparent(self, parent, new_name):
125 self._parent = parent
126 self._name = new_name
127 for nam in self._subtypes:
128 obj = getattr(self, nam)
129 obj.reparent(self, nam)
130 if self.nomj is None and self._parent._name is not None:
131 self.nomj = "." + self._parent._name