214 def call(self, done=None, **kwargs): |
214 def call(self, done=None, **kwargs): |
215 if done is None: |
215 if done is None: |
216 done = set() |
216 done = set() |
217 super(TreeViewMixIn, self).call(done=done, **kwargs) |
217 super(TreeViewMixIn, self).call(done=done, **kwargs) |
218 |
218 |
219 def cell_call(self, row, col=0, vid=None, done=None, **kwargs): |
219 def cell_call(self, row, col=0, vid=None, done=None, maxlevel=None, **kwargs): |
|
220 assert maxlevel is None or maxlevel > 0 |
220 done, entity = _done_init(done, self, row, col) |
221 done, entity = _done_init(done, self, row, col) |
221 if done is None: |
222 if done is None: |
222 # entity is actually an error message |
223 # entity is actually an error message |
223 self.w(u'<li class="badcontent">%s</li>' % entity) |
224 self.w(u'<li class="badcontent">%s</li>' % entity) |
224 return |
225 return |
225 self.open_item(entity) |
226 self.open_item(entity) |
226 entity.view(vid or self.item_vid, w=self.w, **kwargs) |
227 entity.view(vid or self.item_vid, w=self.w, **kwargs) |
|
228 if maxlevel is not None: |
|
229 maxlevel -= 1 |
|
230 if maxlevel == 0: |
|
231 self.close_item(entity) |
|
232 return |
227 relatedrset = entity.children(entities=False) |
233 relatedrset = entity.children(entities=False) |
228 self.wview(self.__regid__, relatedrset, 'null', done=done, **kwargs) |
234 self.wview(self.__regid__, relatedrset, 'null', done=done, |
|
235 maxlevel=maxlevel, **kwargs) |
229 self.close_item(entity) |
236 self.close_item(entity) |
230 |
237 |
231 def open_item(self, entity): |
238 def open_item(self, entity): |
232 self.w(u'<li class="%s">\n' % entity.__regid__.lower()) |
239 self.w(u'<li class="%s">\n' % entity.__regid__.lower()) |
233 def close_item(self, entity): |
240 def close_item(self, entity): |