Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Desktop/dzialo/paste/HelloDoctor.activity/HelloDoctor.py
diff options
context:
space:
mode:
Diffstat (limited to 'Desktop/dzialo/paste/HelloDoctor.activity/HelloDoctor.py')
-rwxr-xr-xDesktop/dzialo/paste/HelloDoctor.activity/HelloDoctor.py298
1 files changed, 298 insertions, 0 deletions
diff --git a/Desktop/dzialo/paste/HelloDoctor.activity/HelloDoctor.py b/Desktop/dzialo/paste/HelloDoctor.activity/HelloDoctor.py
new file mode 100755
index 0000000..49a176e
--- /dev/null
+++ b/Desktop/dzialo/paste/HelloDoctor.activity/HelloDoctor.py
@@ -0,0 +1,298 @@
+import sys
+import os
+import re
+from time import gmtime, strftime
+import pygtk
+import gtk
+import clips
+
+import gst
+import tempfile
+
+GST_PIPE = ['v4l2src', 'ffmpegcolorspace', 'pngenc']
+
+from sugar.activity import activity
+from sugar.graphics import style
+
+from gettext import gettext as _
+
+class HelloDoctor(activity.Activity):
+ def __init__(self, handle):
+ "Entry point"
+ activity.Activity.__init__(self, handle)
+ self._name = handle
+
+ toolbox = activity.ActivityToolbox(self)
+ activity_toolbar = toolbox.get_activity_toolbar()
+ activity_toolbar.keep.props.visible = False
+ activity_toolbar.share.props.visible = False
+ self.set_toolbox(toolbox)
+
+ toolbox.show()
+
+ self.set_title(_("HelloDoctor"))
+# self.window.set_border_width(5)
+# self.window.set_size_request(640, 480)
+ self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("black"))
+ self.settings = gtk.Settings()
+ self.settings.set_string_property('gtk-font-name', 'courier bold 10', '')
+ self.settings.set_long_property("gtk-button-images", False, "")
+ self._main_view = gtk.EventBox()
+ self._main_view.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("khaki"))
+ self.set_canvas(self._main_view)
+ self.homescreen()
+
+ def homescreen(self, widget=None, oldcontainer=None):
+ homebox=gtk.VBox()
+ table= gtk.Table(20, 12, True)
+ colorbutton = gtk.ColorButton(gtk.gdk.color_parse("khaki"))
+ colorbutton.connect('color-set', self.set_background_color)
+ color = colorbutton.get_color()
+ title_label=gtk.Label()
+ labeltext_title=(_("Hello \nDoctor!"))
+ title_label.set_markup("<big><big><big><big><big><big><big>%s</big></big></big></big></big></big></big>" % (labeltext_title))
+ title_button=gtk.Button()
+ title_button.connect("clicked", self.symptomChose, homebox, '')
+ title_button_img=gtk.Image()
+ title_button_img.set_from_file("images/interface/start_button.svg")
+ title_button.set_image(title_button_img)
+ title_image=gtk.Image()
+ title_image.set_from_file("images/interface/doctor.svg")
+
+ table.attach(colorbutton, 1, 3, 15, 18)
+ table.attach(title_label, 0, 4, 4, 9)
+ table.attach(title_image, 4, 12, 0, 15)
+ table.attach(title_button, 7, 10, 14, 19)
+
+ homebox.pack_start(table)
+
+ if oldcontainer != None:
+ self._main_view.remove(oldcontainer)
+ oldcontainer.destroy()
+ self._main_view.add(homebox)
+ self._main_view.show()
+ self.symptomMain()
+ self.show_all()
+
+ def set_background_color(self, colorbutton):
+ color = colorbutton.get_color()
+ self._main_view.modify_bg(gtk.STATE_NORMAL, color)
+
+ def symptomMain(self):
+ global curr_counter_number, counter_max, list
+ list = []
+ rulesfile = open("rules.clp", "r")
+ for line in rulesfile:
+ matched_expr = re.search(re.escape("MAIN::symptom")+"(.*?)"+re.escape(" "),line)
+ if matched_expr==None:
+ continue
+ toprin = matched_expr.group(1)
+ list.append([toprin, ''])
+ finiline = line.find('))')
+ if finiline != -1:
+ break
+
+ curr_counter_number=0
+ counter_max=len(list) -1
+
+ def symptomChose(self, widget, oldcontainer, value):
+ global curr_counter_number, counter_max, list
+ if (value == "plus"):
+ curr_counter_number=curr_counter_number+1
+ if (value == "minus"):
+ curr_counter_number=curr_counter_number-1
+
+ symptom = list[curr_counter_number][0]
+ fraction = 0.05 + (curr_counter_number/(counter_max+1.0))
+
+ symptombox=gtk.VBox()
+ symptom_table= gtk.Table(20, 14, True)
+
+ progress=gtk.ProgressBar()
+ progress.set_fraction(fraction)
+ progress.set_text("%s/%s %s" % ((curr_counter_number+1),(counter_max+1),symptom))
+ symptom_image=gtk.Image()
+ symptom_image.set_from_file("images/symptoms/%s.svg" % (symptom))
+
+ button_yes=gtk.ToggleButton()
+ button_no=gtk.ToggleButton()
+ button_yes.connect("toggled", self.toggle_callback, "yes", button_no)
+ button_no.connect("toggled", self.toggle_callback, "no", button_yes)
+ if (list[curr_counter_number][1] == 'yes'):
+ button_yes.set_active(True)
+ elif (list[curr_counter_number][1] == 'no'):
+ button_no.set_active(True)
+
+ but_yes_img=gtk.Image()
+ but_yes_img.set_from_file("images/interface/oktick.svg")
+ button_yes.set_image(but_yes_img)
+ but_no_img=gtk.Image()
+ but_no_img.set_from_file("images/interface/oktick.svg")
+ button_no.set_image(but_no_img)
+
+ symptom_table.attach(button_yes, 3, 5, 17, 20)
+ symptom_table.attach(button_no, 9, 11, 17, 20)
+
+ button_next=gtk.Button()
+ but_next_img=gtk.Image()
+ but_next_img.set_from_file("images/interface/next_but.svg")
+ button_next.set_image(but_next_img)
+ nextcon=button_next.connect("clicked", self.symptomChose, symptombox, "plus")
+
+ if (curr_counter_number != 0):
+
+ button_prev=gtk.Button()
+ but_prev_img=gtk.Image()
+ but_prev_img.set_from_file("images/interface/prev_but.svg")
+ button_prev.connect("clicked", self.symptomChose, symptombox, "minus")
+ button_prev.set_image(but_prev_img)
+ symptom_table.attach(button_prev, 0, 2, 17, 20)
+ if (curr_counter_number == counter_max):
+ button_next.disconnect(nextcon)
+ button_next.connect("clicked", self.finishdialog, symptombox)
+
+ symptom_table.attach(progress, 1, 13, 0, 1)
+ symptom_table.attach(symptom_image, 1, 13, 1, 17)
+ symptom_table.attach(button_next, 12, 14, 17, 20)
+
+ symptombox.add(symptom_table)
+
+ print "values in symptomChose: curr: %s max: %s" % (curr_counter_number, counter_max)
+
+ self._main_view.remove(oldcontainer)
+ oldcontainer.destroy()
+ self._main_view.add(symptombox)
+ self.show_all()
+
+ def toggle_callback(self, widget, data, secondone):
+ global list
+ if (widget.get_active()):
+ list[curr_counter_number][1]=data
+ secondone.set_active(False)
+
+ def finishdialog(self, widget, oldcontainer):
+ dialog = gtk.Dialog("Finish?", None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT, gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT))
+# dialog.set_modal(True)
+# self._main_view.set_transient_for(dialog)
+ dialogimage= gtk.Image()
+ dialogimage.set_from_file("images/interface/to_solution.svg")
+ dialog.vbox.pack_start(dialogimage, True, True, 0)
+
+ button1 = gtk.Button()
+ dialog.action_area.pack_start(button1, True, True, 0)
+
+ button2 = gtk.Button()
+ dialog.action_area.pack_start(button2, True, True, 0)
+
+ dialogimage.show()
+
+ dialogresult = dialog.run()
+
+ if (dialogresult == gtk.RESPONSE_ACCEPT):
+ self._main_view.remove(oldcontainer)
+ oldcontainer.destroy()
+ self.solution()
+ dialog.destroy()
+
+ elif (dialogresult == gtk.RESPONSE_REJECT):
+ dialog.destroy()
+
+ def solution(self):
+ solutionbox= gtk.EventBox()
+ solution_hands= gtk.HBox()
+ solution_table= gtk.Table(20, 14, True)
+ solutionbox.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("white"))
+
+ patientphoto = gtk.Image()
+ photo = Camera()
+ photo.Snap()
+ photopath = photo.snap_path
+ patientpixbuf = gtk.gdk.pixbuf_new_from_file_at_size(photopath, 500, 475)
+ patientphoto.set_from_pixbuf(patientpixbuf)
+# patientphoto.set_from_file("%s" % photopath)
+# patientpixbuf = gtk.gdk.pixbuf_new_from_file_at_size(photopath, 300, 500)
+# patientpixbuf.pixbuf
+
+ logfile = open('logfile.txt', 'a')
+ currtime = strftime("%H:%M:%S, %d %b %Y", gmtime())
+ towrite = str('---------%s---------\n' % currtime)
+ logfile.write(towrite)
+ logfile.close()
+
+ clips.Clear()
+ clips.Load("rules.clp")
+ clips.Reset()
+ beginingstate= clips.FactList()
+ total_diseases= 0
+ for bs in beginingstate:
+ if bs.Relation == 'disease':
+ total_diseases += 1
+ print total_diseases
+ for i in list:
+ sym = i[0]
+ occ = i[1]
+ if occ == '':
+ occ = 'no'
+ clips.Assert("(symptom %s %s)" % (sym,occ))
+ clips.Run()
+ result= clips.FactList()
+ numof_res = 0
+ for f in result:
+ if f.Relation == 'disease':
+ numof_res += 1
+ dis = f.CleanPPForm()
+ number = re.search(re.escape("(disease ")+"(.*?)"+re.escape(" "), dis)
+ justonedis = number.group(1)
+ total = map(int, justonedis)
+ print total
+
+ solution_image = gtk.Image()
+ if numof_res == total_diseases:
+# solution_image.set_from_file("%s" % photopath)
+ solution_image.set_from_file("images/interface/healthy.svg")
+ else:
+ solution_image.set_from_file("images/interface/to_hospital.svg")
+ num_label2 = gtk.Label()
+ if numof_res == 0:
+ sollab_text = '000'
+ elif numof_res == 1:
+ sollab_text = justonedis
+ else:
+ sollab_text = 'UNK'
+ solution_table.attach(num_label2, 4, 7, 14, 16)
+ num_label2.set_markup("<big><big><big><big><big><big><big>%s</big></big></big></big></big></big></big>" % (sollab_text));
+ solution_table.attach(patientphoto, 0, 7, 1, 10)
+ solution_table.attach(solution_image, 2, 14, 1, 19)
+
+ reload_button = gtk.Button()
+ reload_button_img = gtk.Image()
+# reload_button_img.set_from_stock(gtk.STOCK_REFRESH, gtk.ICON_SIZE_BUTTON)
+ reload_button_img.set_from_file("images/interface/reload.svg")
+ reload_button.set_image(reload_button_img)
+ reload_button.connect("clicked", self.homescreen, solution_table)
+ solution_table.attach(reload_button, 12, 14, 17, 20)
+
+ self._main_view.add(solution_table)
+ self.show_all()
+
+class Camera(object):
+
+ """A class repre camera"""
+
+ def __init__(self):
+ snap_file, self.snap_path = tempfile.mkstemp()
+ pipe = GST_PIPE + ['filesink location=%s' % self.snap_path]
+ self.pipe = gst.parse_launch('!'.join(pipe))
+ self.bus = self.pipe.get_bus()
+
+ def Snap(self):
+ """Take a snapshop"""
+ self.pipe.set_state(gst.STATE_PLAYING)
+ self.bus.poll(gst.MESSAGE_EOS, -1)
+ self.pipe.set_state(gst.STATE_NULL)
+
+
+# if __name__ == "__main__":
+#
+# HelloDoctor().main()
+# gtk.main()