1
2
3
4
5
6 import os
7 import algorithm
8 import registration_based
9 from pygccxml import declarations
10
11 -class property_t( registration_based.registration_based_t ):
12 - def __init__(self, property_def, wrapper=None ):
17
18 @property
20 return self._property_def
21
22 @property
24 if not self._make_function:
25 self._make_function = algorithm.create_identifier( self, '::boost::python::make_function' )
26 return self._make_function
27
30
50
61
67
82
84 result = []
85 param_sep = ', '
86 if self.has_long_line():
87 param_sep = os.linesep + self.indent( param_sep )
88
89 fget_class_typedef_code, fget_class_alias = None, None
90 fset_class_typedef_code, fset_class_alias = None, None
91 if self.is_same_parent():
92 fget_class_typedef_code, fget_class_alias \
93 = self.create_class_typedef_on_demand( self.property_def.fget )
94 fset_class_alias = fget_class_alias
95 fset_class_typedef_code = fget_class_typedef_code
96 else:
97 fget_class_typedef_code, fget_class_alias \
98 = self.create_class_typedef_on_demand( self.property_def.fget, 'fget_' )
99 fset_class_typedef_code, fset_class_alias \
100 = self.create_class_typedef_on_demand( self.property_def.fset, 'fset_' )
101
102 if fget_class_typedef_code:
103 result.append( fget_class_typedef_code )
104
105 if fset_class_typedef_code and fset_class_typedef_code != fget_class_typedef_code:
106 result.append( os.linesep )
107 result.append( fset_class_typedef_code )
108
109 if result:
110 result.append( 2 * os.linesep )
111
112 result.append( self.create_function_type_alias_code( self.property_def.fget, 'fget', fget_class_alias ) )
113 if self.property_def.fset:
114 result.append( os.linesep )
115 result.append( self.create_function_type_alias_code( self.property_def.fset, 'fset', fset_class_alias ) )
116
117 result.append( 2 * os.linesep )
118
119 add_property = None
120 if self.property_def.is_static:
121 add_property = 'add_static_property'
122 else:
123 add_property = 'add_property'
124
125 class_var_name = self.parent.class_var_name
126 if self.has_long_line():
127 result.append( '%s.%s( ' % ( class_var_name, add_property ) )
128 result.append( os.linesep + self.indent( '"%s"' % self.property_def.name ) )
129 else:
130 result.append( '%s.%s( "%s"' % ( class_var_name, add_property, self.property_def.name ) )
131 result.append( param_sep + self.create_accessor_code( self.property_def.fget, 'fget' ) )
132 if self.property_def.fset:
133 result.append( param_sep + self.create_accessor_code( self.property_def.fset, 'fset' ))
134 if self.property_def.doc:
135 result.append( param_sep + self.property_def.doc)
136 result.append( ' );')
137 return ''.join( result )
138
140 result = []
141 result.append( '{ //%s' % self.property_def )
142 result.append( '' )
143 result.append( self.indent( self.create_property_code() ) )
144 result.append( '' )
145 result.append( '}' )
146 return os.linesep.join( result )
147
150