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 |