web/views/primary.py
changeset 6140 65a619eb31c4
parent 6139 f76599a96238
child 6141 b8287e54b528
equal deleted inserted replaced
6139:f76599a96238 6140:65a619eb31c4
   192         for box in boxes:
   192         for box in boxes:
   193             if isinstance(box, tuple):
   193             if isinstance(box, tuple):
   194                 try:
   194                 try:
   195                     label, rset, vid, dispctrl  = box
   195                     label, rset, vid, dispctrl  = box
   196                 except ValueError:
   196                 except ValueError:
   197                     warn('[3.5] box views should now be defined as a 4-uple (label, rset, vid, dispctrl), '
       
   198                          'please update %s' % self.__class__.__name__,
       
   199                          DeprecationWarning)
       
   200                     label, rset, vid = box
   197                     label, rset, vid = box
   201                     dispctrl = {}
   198                     dispctrl = {}
       
   199                 warn('[3.10] box views should now be a RsetBox instance, '
       
   200                      'please update %s' % self.__class__.__name__,
       
   201                      DeprecationWarning)
   202                 self.w(u'<div class="sideBox">')
   202                 self.w(u'<div class="sideBox">')
   203                 self.wview(vid, rset, title=label, initargs={'dispctrl': dispctrl})
   203                 self.wview(vid, rset, title=label, initargs={'dispctrl': dispctrl})
   204                 self.w(u'</div>')
   204                 self.w(u'</div>')
   205             else:
   205             else:
   206                 try:
   206                  try:
   207                     box.render(w=self.w, row=self.cw_row)
   207                      box.render(w=self.w, row=self.cw_row)
   208                 except NotImplementedError:
   208                  except NotImplementedError:
   209                     # much probably a context insensitive box, which only implements
   209                     # much probably a context insensitive box, which only
   210                     # .call() and not cell_call()
   210                     # implements .call() and not cell_call()
       
   211                     # XXX shouldn't occurs with the new box system
   211                     box.render(w=self.w)
   212                     box.render(w=self.w)
   212 
   213 
   213     def _prepare_side_boxes(self, entity):
   214     def _prepare_side_boxes(self, entity):
   214         sideboxes = []
   215         sideboxes = []
       
   216         boxesreg = self._cw.vreg['boxes']
   215         for rschema, tschemas, role, dispctrl in self._section_def(entity, 'sideboxes'):
   217         for rschema, tschemas, role, dispctrl in self._section_def(entity, 'sideboxes'):
   216             rset = self._relation_rset(entity, rschema, role, dispctrl)
   218             rset = self._relation_rset(entity, rschema, role, dispctrl)
   217             if not rset:
   219             if not rset:
   218                 continue
   220                 continue
   219             label = self._rel_label(entity, rschema, role, dispctrl)
   221             label = self._rel_label(entity, rschema, role, dispctrl)
   220             vid = dispctrl.get('vid', 'sidebox')
   222             vid = dispctrl.get('vid', 'autolimited')
   221             sideboxes.append( (label, rset, vid, dispctrl) )
   223             box = boxesreg.select('rsetbox', self._cw, rset=rset,
   222         sideboxes += self._cw.vreg['boxes'].poss_visible_objects(
   224                                   vid=vid, title=label, dispctrl=dispctrl,
   223             self._cw, rset=self.cw_rset, row=self.cw_row, view=self,
   225                                   context='incontext')
   224             context='incontext')
   226             sideboxes.append(box)
       
   227         sideboxes += boxesreg.poss_visible_objects(
       
   228              self._cw, rset=self.cw_rset, row=self.cw_row, view=self,
       
   229              context='incontext')
   225         # XXX since we've two sorted list, it may be worth using bisect
   230         # XXX since we've two sorted list, it may be worth using bisect
   226         def get_order(x):
   231         def get_order(x):
   227             if isinstance(x, tuple):
   232             if 'order' in x.cw_property_defs:
   228                 # x is a view box (label, rset, vid, dispctrl)
   233                 return x.cw_propval('order')
   229                 # default to 1000 so view boxes occurs after component boxes
   234             # default to 9999 so view boxes occurs after component boxes
   230                 return x[-1].get('order', 1000)
   235             return x.cw_extra_kwargs.get('dispctrl', {}).get('order', 9999)
   231             # x is a component box
       
   232             return x.cw_propval('order')
       
   233         return sorted(sideboxes, key=get_order)
   236         return sorted(sideboxes, key=get_order)
   234 
   237 
   235     def _section_def(self, entity, where):
   238     def _section_def(self, entity, where):
   236         rdefs = []
   239         rdefs = []
   237         eschema = entity.e_schema
   240         eschema = entity.e_schema