Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/activity.py
diff options
context:
space:
mode:
Diffstat (limited to 'activity.py')
-rw-r--r--activity.py160
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)