mixins.py
changeset 5718 8d246203730a
parent 5569 cb14af012a96
child 5895 6a3f776292a5
equal deleted inserted replaced
5717:3c281b6f16c6 5718:8d246203730a
   192     if done is None:
   192     if done is None:
   193         done = set()
   193         done = set()
   194     entity = view.cw_rset.get_entity(row, col)
   194     entity = view.cw_rset.get_entity(row, col)
   195     if entity.eid in done:
   195     if entity.eid in done:
   196         msg = entity._cw._('loop in %(rel)s relation (%(eid)s)') % {
   196         msg = entity._cw._('loop in %(rel)s relation (%(eid)s)') % {
   197             'rel': entity.tree_attribute,
   197             'rel': entity.cw_adapt_to('ITree').tree_relation,
   198             'eid': entity.eid
   198             'eid': entity.eid
   199             }
   199             }
   200         return None, msg
   200         return None, msg
   201     done.add(entity.eid)
   201     done.add(entity.eid)
   202     return done, entity
   202     return done, entity
   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):