diff options
Diffstat (limited to 'activity.py')
-rw-r--r-- | activity.py | 160 |
1 files changed, 124 insertions, 36 deletions
diff --git a/activity.py b/activity.py index 5e5afaa..77b17c7 100644 --- a/activity.py +++ b/activity.py @@ -28,7 +28,13 @@ from sugar.activity.widgets import StopButton from sugar.graphics.toolbarbox import ToolbarBox from sugar.graphics.toolbutton import ToolButton -from charts import BarChart +from pycha.color import basicColors as basic_colors + +from charts import Chart + +COLOR1 = gtk.gdk.Color("#224565") +COLOR2 = gtk.gdk.Color("#C0C0C0") +COLOR3 = gtk.gdk.Color("#D1E5EC") class SimpleGraph(activity.Activity): @@ -41,11 +47,12 @@ class SimpleGraph(activity.Activity): # CHART_OPTIONS - self.x_label = None - self.y_label = None - self.chart_title = None - self.chart_color = None - self.chart_line_color = None + self.x_label = "" + self.y_label = "" + self.chart_title = "" + self.bg_color = "#C0C0C0" + self.chart_color = '#224565' + self.chart_line_color = "#D1E5EC" self.current_chart = None self.chart_data = [] @@ -61,6 +68,12 @@ class SimpleGraph(activity.Activity): self.toolbarbox.toolbar.insert(self.add_v, -1) + self.remove_v = ToolButton("gtk-remove") + self.remove_v.connect("clicked", self.remove_value) + self.remove_v.set_tooltip("Remove the selected value") + + #self.toolbarbox.toolbar.insert(self.remove_v, -1) + separator = gtk.SeparatorToolItem() separator.set_draw(False) separator.set_expand(True) @@ -68,7 +81,7 @@ class SimpleGraph(activity.Activity): self.add_vbar_chart = ToolButton("vbar") self.add_vbar_chart.connect("clicked", self.add_chart_cb, "vbar") - self.add_vbar_chart.set_tooltip("Create a Vertical bar chart") + self.add_vbar_chart.set_tooltip("Create a vertical bar chart") self.toolbarbox.toolbar.insert(self.add_vbar_chart, -1) self.add_hbar_chart = ToolButton("hbar") @@ -77,6 +90,26 @@ class SimpleGraph(activity.Activity): self.toolbarbox.toolbar.insert(self.add_hbar_chart, -1) separator = gtk.SeparatorToolItem() + separator.set_draw(True) + separator.set_expand(False) + self.toolbarbox.toolbar.insert(separator, -1) + + self.add_line_chart = ToolButton("line") + self.add_line_chart.connect("clicked", self.add_chart_cb, "line") + self.add_line_chart.set_tooltip("Create a line chart") + self.toolbarbox.toolbar.insert(self.add_line_chart, -1) + + separator = gtk.SeparatorToolItem() + separator.set_draw(True) + separator.set_expand(False) + self.toolbarbox.toolbar.insert(separator, -1) + + self.add_pie_chart = ToolButton("pie") + self.add_pie_chart.connect("clicked", self.add_chart_cb, "pie") + self.add_pie_chart.set_tooltip("Create a pie chart") + self.toolbarbox.toolbar.insert(self.add_pie_chart, -1) + + separator = gtk.SeparatorToolItem() separator.set_draw(False) separator.set_expand(True) self.toolbarbox.toolbar.insert(separator, -1) @@ -90,12 +123,15 @@ class SimpleGraph(activity.Activity): self.paned = gtk.HPaned() self.box = gtk.VBox() + self.scroll = gtk.ScrolledWindow() + self.scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.labels_and_values = TreeView() + self.scroll.add(self.labels_and_values) self.labels_and_values.connect("label-changed", self.label_changed) self.labels_and_values.connect("value-changed", self.value_changed) - self.box.pack_start(self.labels_and_values, True, True, 0) + self.box.pack_start(self.scroll, True, True, 0) self.options = Options() @@ -103,6 +139,7 @@ class SimpleGraph(activity.Activity): self.options.connect("hlabel-changed", self.set_h_label) self.options.connect("vlabel-changed", self.set_v_label) self.options.connect("chart-color-changed", self.set_chart_color) + self.options.connect("bg-color-changed", self.set_bg_color) self.options.connect("line-color-changed", self.set_chart_line_color) self.box.pack_end(self.options, False, True, 10) @@ -121,24 +158,29 @@ class SimpleGraph(activity.Activity): self.labels_and_values.add_value("Unknown", "0") self.chart_data.append(("Unknown", "0")) - def add_chart_cb(self, widget, type="vbar"): - if type == "vbar": - self.current_chart = BarChart(type="vertical") - - elif type == "hbar": - self.current_chart = BarChart(type="horizontal") - - print self.chart_data + def remove_value(self, widget): + self.remove_selected_value() - self.current_chart.data_set(self.chart_data) - self.current_chart.set_title(self.chart_title) - self.current_chart.set_x_label(self.x_label) - self.current_chart.set_y_label(self.y_label) - self.current_chart.set_chart_color(self.chart_color) - self.current_chart.set_line_color(self.chart_line_color) - self.current_chart.connect("ready", lambda w, f: - self.charts_area.set_from_file(f)) - self.current_chart.render() + def add_chart_cb(self, widget, type="vbar"): + self.current_chart = Chart(type) + + self.update_chart() + + def update_chart(self): + if self.current_chart: + self.current_chart.data_set(self.chart_data) + self.current_chart.set_title(self.chart_title) + self.current_chart.set_x_label(self.x_label) + self.current_chart.set_y_label(self.y_label) + self.current_chart.set_bg_color(self.bg_color) + self.current_chart.set_color_scheme(color=self.chart_color) + self.current_chart.set_line_color(self.chart_line_color) + self.current_chart.connect("ready", lambda w, f: + self.charts_area.set_from_file(f)) + if self.current_chart.type == "pie": + self.current_chart.render(self) + + else: self.current_chart.render() def label_changed(self, tw, path, new_label): path = int(path) @@ -146,7 +188,7 @@ class SimpleGraph(activity.Activity): def value_changed(self, tw, path, new_value): path = int(path) - self.chart_data[path] = (self.chart_data[path][0], int(new_value)) + self.chart_data[path] = (self.chart_data[path][0], float(new_value)) def set_h_label(self, options, label): self.x_label = label @@ -160,6 +202,9 @@ class SimpleGraph(activity.Activity): def set_chart_color(self, options, color): self.chart_color = color + def set_bg_color(self, options, color): + self.bg_color = color + def set_chart_line_color(self, options, color): self.chart_line_color = color @@ -206,6 +251,9 @@ class TreeView(gtk.TreeView): self.model.append([label, value]) print "Added: %s, Value: %s" % (label, value) + def remove_selected_value(self): + self.remove(self.get_selection()) + def label_changed(self, cell, path, new_text, model): print "Change '%s' to '%s'" % (model[path][0], new_text) model[path][0] = new_text @@ -243,6 +291,7 @@ class Options(gtk.VBox): 'title-changed': (gobject.SIGNAL_RUN_FIRST, None, [str]), 'hlabel-changed': (gobject.SIGNAL_RUN_FIRST, None, [str]), 'vlabel-changed': (gobject.SIGNAL_RUN_FIRST, None, [str]), + 'bg-color-changed': (gobject.SIGNAL_RUN_FIRST, None, [object]), 'chart-color-changed': (gobject.SIGNAL_RUN_FIRST, None, [object]), 'line-color-changed': (gobject.SIGNAL_RUN_FIRST, None, [object])} @@ -283,16 +332,29 @@ class Options(gtk.VBox): self.pack_start(hbox, False, True, 3) hbox = gtk.HBox() - title = gtk.Label("Background Color:") + title = gtk.Label("Chart color:") + hbox.pack_start(title, False, True, 0) + + btn = gtk.Button("Color") + btn.id = 3 + btn.modify_bg(gtk.STATE_NORMAL, COLOR1) + btn.modify_bg(gtk.STATE_PRELIGHT, COLOR1) + btn.connect("clicked", self.color_selector) + hbox.pack_end(btn, False, True, 5) + + self.pack_start(hbox, False, True, 3) + + hbox = gtk.HBox() + title = gtk.Label("Background color:") hbox.pack_start(title, False, True, 0) btn = gtk.Button() - btn.id = 0 + btn.id = 1 label = gtk.Label("Color") label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.Color("#000000")) btn.add(label) - btn.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color("#F3F9FB")) - btn.modify_bg(gtk.STATE_PRELIGHT, gtk.gdk.Color("#F3F9FB")) + btn.modify_bg(gtk.STATE_NORMAL, COLOR2) + btn.modify_bg(gtk.STATE_PRELIGHT, COLOR2) btn.connect("clicked", self.color_selector) hbox.pack_end(btn, False, True, 5) @@ -303,13 +365,13 @@ class Options(gtk.VBox): hbox.pack_start(title, False, True, 0) btn = gtk.Button() - btn.id = 1 + btn.id = 2 label = gtk.Label("Color") label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.Color("#000000")) btn.add(label) btn.connect("clicked", self.color_selector) - btn.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color("#D1E5EC")) - btn.modify_bg(gtk.STATE_PRELIGHT, gtk.gdk.Color("#D1E5EC")) + btn.modify_bg(gtk.STATE_NORMAL, COLOR3) + btn.modify_bg(gtk.STATE_PRELIGHT, COLOR3) hbox.pack_end(btn, False, True, 5) self.pack_start(hbox, False, True, 3) @@ -318,6 +380,29 @@ class Options(gtk.VBox): def color_selector(self, widget): selector = gtk.ColorSelectionDialog("Color Selector") + + if widget.id == 3: + + box = gtk.HBox() + + for color in basic_colors.keys(): + btn = gtk.Button() + btn.set_size_request(40, 40) + btn.set_property("has-tooltip", True) + btn.set_property("tooltip-text", str(color).capitalize()) + btn.color = gtk.gdk.Color(basic_colors[color]) + btn.connect("clicked", lambda w: selector.colorsel.set_current_color(w.color)) + btn.modify_bg(gtk.STATE_NORMAL, btn.color) + btn.modify_bg(gtk.STATE_PRELIGHT, btn.color) + box.pack_start(btn, False, True, 1) + + selector.vbox.pack_end(box, False, True, 0) + selector.colorsel.set_current_color(COLOR1) + + elif widget.id == 2: selector.colorsel.set_current_color(COLOR3) + + elif widget.id == 1: selector.colorsel.set_current_color(COLOR2) + selector.get_color_selection().connect("color-changed", self.color_changed, widget) selector.ok_button.connect("clicked", lambda w: selector.destroy()) @@ -346,8 +431,11 @@ class Options(gtk.VBox): new_color = "#%s%s%s" % (red, green, blue) - if not btn.id: - self.emit("chart-color-changed", new_color) + if btn.id == 1: + self.emit("bg-color-changed", new_color) - elif btn.id: + elif btn.id == 2: self.emit("line-color-changed", new_color) + + elif btn.id == 3: + self.emit("chart-color-changed", new_color) |