diff options
Diffstat (limited to 'GrapherActivity-sugarized.py~')
-rwxr-xr-x | GrapherActivity-sugarized.py~ | 355 |
1 files changed, 355 insertions, 0 deletions
diff --git a/GrapherActivity-sugarized.py~ b/GrapherActivity-sugarized.py~ new file mode 100755 index 0000000..c69b721 --- /dev/null +++ b/GrapherActivity-sugarized.py~ @@ -0,0 +1,355 @@ +import logging +from sugar.activity import activity +import pygtk +pygtk.require('2.0') +import gtk +import cairo +import graphs as graph +import math +X = 1200 +Y = 900 + + +class GrapherActivity(activity.Activity): + def delete_event(self, widget, event, data=None): + print "delete event occurred" + return False + + def destroy(self, widget, data=None): + print "destroy signal occurred" + gtk.main_quit() + + + def __init__(self,handle): + activity.Activity.__init__(self,handle) + self.set_title('Logic Circuits Activity') + self.buildGUI() + + self.graphs = {"Function": [], + "Polar": [], + "Parametric": []} + + self.Graphs = [] + + + + self.settings = {"degrees": False, + "width": 900, + "height": 900, + "xmin": -10, + "xmax": 10, + "ymin": -10, + "ymax": 10, + "thetamin" : 0, + "thetamax" : 2*math.pi, + "tmin": -10, + "tmax": 10, + "points": 1000, + "mode": "Polar"} + self.axis = graph.Axis(self.settings) + + gtk.main() + + + def buildGUI(self): + self.hpaned = gtk.HPaned() + + self.drawing_area = gtk.DrawingArea() + self.hpaned.add1(self.drawing_area) + self.drawing_area.set_size_request(3*X/4, Y) + self.drawing_area.show() + self.drawing_area.connect("expose_event", self.expose) + + self.vpaned = gtk.VPaned() + self.hpaned.add2(self.vpaned) + self.vpaned.show() + + #creat the settings panel + frame = gtk.Frame("Settings") + self.vpaned.add2(frame) + frame.show() + settings_table = gtk.Table(2,12,False) + frame.add(settings_table) + settings_table.show() + self.Xminlabel = gtk.Label("X Min") + self.Xmaxlabel = gtk.Label("X Max") + self.Yminlabel = gtk.Label("Y Min") + self.Ymaxlabel = gtk.Label("Y Max") + self.Thetaminlabel = gtk.Label("Theta Min") + self.Thetamaxlabel = gtk.Label("Theta Max") + self.Tminlabel = gtk.Label("T Min") + self.Tmaxlabel = gtk.Label("T Max") + self.numPointslabel = gtk.Label("Number of Points") + settings_table.attach(self.Xminlabel,0,1,0,1) + settings_table.attach(self.Xmaxlabel,0,1,1,2) + settings_table.attach(self.Yminlabel,0,1,2,3) + settings_table.attach(self.Ymaxlabel,0,1,3,4) + settings_table.attach(self.Thetaminlabel,0,1,4,5) + settings_table.attach(self.Thetamaxlabel,0,1,5,6) + settings_table.attach(self.Tminlabel,0,1,6,7) + settings_table.attach(self.Tmaxlabel,0,1,7,8) + settings_table.attach(self.numPointslabel,0,1,8,9) + self.Xminlabel.show() + self.Xmaxlabel.show() + self.Yminlabel.show() + self.Ymaxlabel.show() + self.numPointslabel.show() + + self.Xmin = gtk.Entry() + self.Xmax = gtk.Entry() + self.Ymin = gtk.Entry() + self.Ymax = gtk.Entry() + self.Thetamin = gtk.Entry() + self.Thetamax = gtk.Entry() + self.Tmin = gtk.Entry() + self.Tmax = gtk.Entry() + self.numPoints = gtk.Entry() + self.Xmin.set_text("-10") + self.Xmax.set_text("10") + self.Ymin.set_text("-10") + self.Ymax.set_text("10") + self.Thetamin.set_text("0") + self.Thetamax.set_text("6.283") + self.Tmin.set_text("-10") + self.Tmax.set_text("-10") + self.numPoints.set_text("600") + settings_table.attach(self.Xmin,1,2,0,1) + settings_table.attach(self.Xmax,1,2,1,2) + settings_table.attach(self.Ymin,1,2,2,3) + settings_table.attach(self.Ymax,1,2,3,4) + settings_table.attach(self.Thetamin,1,2,4,5) + settings_table.attach(self.Thetamax,1,2,5,6) + settings_table.attach(self.Tmin,1,2,6,7) + settings_table.attach(self.Tmax,1,2,7,8) + settings_table.attach(self.numPoints,1,2,8,9) + self.Xmin.show() + self.Xmax.show() + self.Ymin.show() + self.Ymax.show() + self.numPoints.show() + self.Thetamin.hide() + self.Thetamax.hide() + self.Thetaminlabel.hide() + self.Thetamaxlabel.hide() + self.radians = gtk.CheckButton("Radians") + self.degrees = gtk.CheckButton("Degrees") + settings_table.attach(self.radians,0,1,9,10) + settings_table.attach(self.degrees,1,2,9,10) + self.radians.show() + self.degrees.show() + self.degrees.set_active(True) + self.radians.connect("toggled",self.radians_clicked) + self.degrees.connect("toggled",self.degrees_clicked) + + self.grapherButton = gtk.Button("Graph") + settings_table.attach(self.grapherButton,0,2,10,12) + self.grapherButton.show() + self.grapherButton.connect("clicked", self.expose, None) + + self.notebook = gtk.Notebook() + self.vpaned.add1(self.notebook) + self.notebook.set_size_request(X/4,400) + self.notebook.show() + self.notebook.connect("switch-page", self.mode_changed, None) + + + #Creat Function Notebook page + self.func_table = gtk.Table(2,5,False) + label = gtk.Label("Function") + self.notebook.append_page(self.func_table,label) + label.show() + self.func_table.show() + self.FunctionTexts = [] + i = 0 + while i < 5: + label = gtk.Label("Y"+str(i+1)+" = ") + self.func_table.attach(label,0,1,i,i+1) + label.show() + textbox = gtk.Entry() + self.FunctionTexts.append(textbox) + self.func_table.attach(textbox,1,2,i,i+1) + textbox.show() + i+= 1 + + + #Creat Polar Notebook page + self.polar_table = gtk.Table(2,8,False) + label = gtk.Label("Polar") + self.notebook.append_page(self.polar_table,label) + label.show() + self.polar_table.show() + self.PolarTexts = [] + i = 0 + while i < 5: + label = gtk.Label("R"+str(i+1)+" = ") + self.polar_table.attach(label,0,1,i,i+1) + label.show() + textbox = gtk.Entry() + self.PolarTexts.append(textbox) + self.polar_table.attach(textbox,1,2,i,i+1) + textbox.show() + i+= 1 + + + #Creat Parametric Notebook page + self.parametric_table = gtk.Table(2,8,False) + label = gtk.Label("Parametric") + self.notebook.append_page(self.parametric_table,label) + label.show() + self.parametric_table.show() + self.ParametricTexts = [] + i = 0 + while i < 4: + label1 = gtk.Label("X"+str(i+1)+" = ") + label2 = gtk.Label("Y"+str(i+1)+" = ") + self.parametric_table.attach(label1,0,1,2*i,2*i+1) + self.parametric_table.attach(label2,0,1,2*i+1,2*i+2) + label1.show() + label2.show() + textboxX = gtk.Entry() + textboxY = gtk.Entry() + self.ParametricTexts.append((textboxX,textboxY)) + self.parametric_table.attach(textboxX,1,2,2*i,2*i+1) + self.parametric_table.attach(textboxY,1,2,2*i+1,2*i+2) + textboxX.show() + textboxY.show() + i+= 1 + self.x = 10 + self.set_canvas(self.hpaned) + self.show_all() + + + + + def graph_clicked(self, widget=None, data=None): + self.grapher() + + def grapher(self): + self.Graphs = [] + self.update_settings() + self.update_graphs() + self.axis = graph.Axis(self.settings) + num = 0 + if self.settings["mode"] == "Function": + for g in self.graphs["Function"]: + self.Graphs.append(graph.FunctionGraph(g, self.settings, num)) + num += 1 + if self.settings["mode"] == "Polar": + for g in self.graphs["Polar"]: + self.Graphs.append(graph.PolarGraph(g, self.settings, num)) + num += 1 + if self.settings["mode"] == "Parametric": + for g in self.graphs["Parametric"]: + self.Graphs.append(graph.ParametricGraph(g[0],g[1], self.settings, num)) + num += 1 + self.axis.draw(self.context) + for g in self.Graphs: + g.draw(self.context) + + + + + def mode_changed(self, notebook, page, page_num, data): + if page_num == 0: + self.Thetamin.hide() + self.Thetamax.hide() + self.Thetaminlabel.hide() + self.Thetamaxlabel.hide() + self.Tmin.hide() + self.Tmax.hide() + self.Tminlabel.hide() + self.Tmaxlabel.hide() + if page_num == 1: + self.Thetamin.show() + self.Thetamax.show() + self.Thetaminlabel.show() + self.Thetamaxlabel.show() + self.Tmin.hide() + self.Tmax.hide() + self.Tminlabel.hide() + self.Tmaxlabel.hide() + if page_num == 2: + self.Thetamin.hide() + self.Thetamax.hide() + self.Thetaminlabel.hide() + self.Thetamaxlabel.hide() + self.Tmin.show() + self.Tmax.show() + self.Tminlabel.show() + self.Tmaxlabel.show() + + def update_settings(self): + self.settings["xmin"] = float(self.Xmin.get_text()) + self.settings["xmax"] = float(self.Xmax.get_text()) + self.settings["ymin"] = float(self.Ymin.get_text()) + self.settings["ymax"] = float(self.Ymax.get_text()) + self.settings["thetamin"] = float(self.Thetamin.get_text()) + self.settings["thetamax"] = float(self.Thetamax.get_text()) + self.settings["tmin"] = float(self.Tmin.get_text()) + self.settings["tmax"] = float(self.Tmax.get_text()) + self.settings["points"] = float(self.numPoints.get_text()) + self.settings["degrees"] = self.degrees.get_active() + mode = self.notebook + self.settings["mode"] = mode.get_tab_label_text(mode.get_nth_page(mode.get_current_page())) + if self.settings["xmin"] > self.settings["xmax"]: + self.settings["xmax"] = 10 + self.settings["xmin"] = -10 + self.Xmax.set_text("10") + self.Xmin.set_text("-10") + if self.settings["ymin"] > self.settings["ymax"]: + self.settings["ymax"] = 10 + self.settings["ymin"] = -10 + self.Ymax.set_text("10") + self.Ymin.set_text("-10") + + + def update_graphs(self): + self.graphs = {"Function": [], + "Polar": [], + "Parametric": []} + for textBox in self.FunctionTexts: + graph = textBox.get_text() + if graph != "": + self.graphs["Function"].append(graph) + for textBox in self.PolarTexts: + graph = textBox.get_text() + if graph != "": + self.graphs["Polar"].append(graph) + for textBoxs in self.ParametricTexts: + Xgraph = textBoxs[0].get_text() + Ygraph = textBoxs[1].get_text() + if Xgraph != "" and Ygraph != "": + self.graphs["Parametric"].append([Xgraph, Ygraph]) + + def radians_clicked(self, data): + value = self.radians.get_active() + if value: + self.degrees.set_active(False) + else: + self.degrees.set_active(True) + + def degrees_clicked(self, data): + value = self.degrees.get_active() + if value: + self.radians.set_active(False) + else: + self.radians.set_active(True) + + def expose(self, widget, event): + self.context = self.drawing_area.window.cairo_create() + # set a clip region for the expose event + self.context.rectangle(0, 0, + *self.drawing_area.window.get_size()) + self.context.clip() + self.context.set_source_rgb(1, 1, 1) + self.context.rectangle(0, 0, *self.drawing_area.window.get_size()) + self.context.fill() + self.context.set_source_rgb(0, 0, 0) + + + self.grapher() + + return False + + + |