Ahmad Sharif | 0dcbc4b | 2012-02-02 16:37:18 -0800 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | |
| 3 | # Copyright 2011 Google Inc. All Rights Reserved. |
| 4 | |
| 5 | |
| 6 | class ColumnChart(object): |
| 7 | def __init__(self, title, width, height): |
| 8 | self.title = title |
| 9 | self.chart_div = filter(str.isalnum, title) |
| 10 | self.width = width |
| 11 | self.height = height |
| 12 | self.columns = [] |
| 13 | self.rows = [] |
| 14 | self.series = [] |
| 15 | |
| 16 | def AddSeries(self, column_name, series_type, color): |
| 17 | for i in range(len(self.columns)): |
| 18 | if column_name == self.columns[i][1]: |
| 19 | self.series.append((i - 1, series_type, color)) |
| 20 | break |
| 21 | |
| 22 | def AddColumn(self, name, column_type): |
| 23 | self.columns.append((column_type, name)) |
| 24 | |
| 25 | def AddRow(self, row): |
| 26 | self.rows.append(row) |
| 27 | |
| 28 | def GetJavascript(self): |
| 29 | res = "var data = new google.visualization.DataTable();\n" |
| 30 | for column in self.columns: |
| 31 | res += "data.addColumn('%s', '%s');\n" % column |
| 32 | res += "data.addRows(%s);\n" % len(self.rows) |
| 33 | for row in range(len(self.rows)): |
| 34 | for column in range(len(self.columns)): |
| 35 | val = self.rows[row][column] |
| 36 | if isinstance(val, str): |
| 37 | val = "'%s'" % val |
| 38 | res += "data.setValue(%s, %s, %s);\n" % (row, column, val) |
| 39 | |
| 40 | series_javascript = "" |
| 41 | for series in self.series: |
| 42 | series_javascript += "%s: {type: '%s', color: '%s'}, " % series |
| 43 | |
| 44 | chart_add_javascript = """ |
| 45 | var chart_%s = new google.visualization.ComboChart( |
| 46 | document.getElementById('%s')); |
| 47 | chart_%s.draw(data, {width: %s, height: %s, title: '%s', legend: 'none', |
| 48 | seriesType: "bars", lineWidth: 0, pointSize: 5, series: {%s}, |
| 49 | vAxis: {minValue: 0}}) |
| 50 | """ |
| 51 | res += chart_add_javascript % (self.chart_div, self.chart_div, |
| 52 | self.chart_div, self.width, |
| 53 | self.height, self.title, series_javascript) |
| 54 | return res |
| 55 | |
| 56 | def GetDiv(self): |
| 57 | return "<div id='%s' class='chart'></div>" % self.chart_div |