175 id = 'piechart' |
175 id = 'piechart' |
176 pieclass = Pie |
176 pieclass = Pie |
177 |
177 |
178 __select__ = at_least_two_columns() & second_column_is_number() |
178 __select__ = at_least_two_columns() & second_column_is_number() |
179 |
179 |
|
180 def _guess_vid(self, row): |
|
181 etype = self.rset.description[row][0] |
|
182 if self.schema.eschema(etype).is_final(): |
|
183 return 'final' |
|
184 return 'textincontext' |
|
185 |
180 def call(self, title=None, width=None, height=None): |
186 def call(self, title=None, width=None, height=None): |
181 labels = ['%s: %s' % (row[0].encode(self.req.encoding), row[1]) |
187 labels = [] |
182 for row in self.rset] |
188 values = [] |
183 values = [(row[1] or 0) for row in self.rset] |
189 for rowidx, (_, value) in enumerate(self.rset): |
|
190 if value is not None: |
|
191 vid = self._guess_vid(rowidx) |
|
192 label = '%s: %s' % (self.view(vid, self.rset, row=rowidx, col=0), |
|
193 value) |
|
194 labels.append(label.encode(self.req.encoding)) |
|
195 values.append(value) |
184 pie = PieChartWidget(labels, values, pieclass=self.pieclass, |
196 pie = PieChartWidget(labels, values, pieclass=self.pieclass, |
185 title=title) |
197 title=title) |
186 if width is not None: |
198 if width is not None: |
187 height = height or width |
199 height = height or width |
188 pie.render(width, height, w=self.w) |
200 pie.render(width, height, w=self.w) |