diff options
Diffstat (limited to 'las-gui.py')
-rw-r--r-- | las-gui.py | 364 |
1 files changed, 364 insertions, 0 deletions
diff --git a/las-gui.py b/las-gui.py new file mode 100644 index 0000000..2d2e21b --- /dev/null +++ b/las-gui.py @@ -0,0 +1,364 @@ +#!/usr/bin/env python + +# example helloworld.py + +import pygtk +pygtk.require('2.0') +import gtk +from las import Listenspell + +class LS_gui: + + # This is a callback function. The data arguments are ignored + # in this example. More on callbacks below. + def __init__(self): + DBname = "dict.db" + self.las = Listenspell(DBname) + self.load_activity_interface() + + def destroy(self, widget, data=None): + #print "destroy signal occurred" + gtk.main_quit() + + def load_activity_interface(self): + self.main_window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.main_window.connect("destroy", self.destroy) + + self.main_window.set_border_width(10) + + self.main_window.set_title("Listen and Spell") + + self.Hcontainer = gtk.HBox() + self.Hcontainer.show() + + self.main_window.add(self.Hcontainer) + + self.vcontainer_left = gtk.VBox() + self.vcontainer_left.set_border_width(10) + self.vcontainer_left.show() + + self.vcontainer_right = gtk.VBox() + self.vcontainer_right.set_border_width(10) + self.vcontainer_right.show() + + + self.Hcontainer.pack_start(self.vcontainer_left,True, True,0) + self.Hcontainer.pack_start(self.vcontainer_right,True, True,0) + + #####################Left Pane widgets########################## + + self.label_v_left_a = gtk.Label("Hello this is label 1") + self.label_v_left_b = gtk.Label("label 2") + + self.label_v_left_a.show() + self.label_v_left_b.show() + + self.text_input = gtk.Entry(0) + #self.text_input.set_text("Preset input text") + #self.text_input. + self.text_input.show() + self.text_input.connect("focus-in-event", self.text_input_focus, None) + self.text_input.connect("activate", self.text_input_activate, None) + + self.console_text_view = gtk.TextView() + #self.console_text_view.show() + + self.console_text_sw = gtk.ScrolledWindow() + self.console_text_sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) + self.console_text_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + + self.console_text_sw.add(self.console_text_view) + + + self.text_submit_button = gtk.Button(label="Submit") + self.text_submit_button.show() + self.text_submit_button.connect("clicked", self.submit_button_clicked, None) + + self.console_text_buffer = gtk.TextBuffer() + self.console_text_buffer.set_text("This is hint text") + self.console_text_view.set_editable(False) + self.console_text_view.set_buffer(self.console_text_buffer) + + self.console_text_frame = gtk.Frame("Console:") + self.console_text_frame.add(self.console_text_sw) + self.console_text_frame.show_all() + + self.vcontainer_left.add(self.label_v_left_a) + self.vcontainer_left.add(self.label_v_left_b) + self.vcontainer_left.add(self.text_input) + self.vcontainer_left.add(self.text_submit_button) + self.vcontainer_left.add(self.console_text_frame) + + + ################################################################ + + #################Right pane wigets############################## + + self.v_buttonbox = gtk.VButtonBox() + + self.repeat_word_button = gtk.Button(label="Repeat Word") + self.repeat_word_button.connect("clicked", self.repeat_word_button_clicked, None) + + self.get_def_button = gtk.Button(label="Get Def") + self.get_def_button.connect("clicked", self.get_def_button_clicked, None) + + self.get_usage_button = gtk.Button("Get Usage") + self.get_usage_button.connect("clicked", self.get_usage_button_clicked, None) + + self.get_word_length_button = gtk.Button("Get Word Length") + self.get_word_length_button.connect("clicked", self.get_word_length_button_clicked, None) + + self.v_buttonbox.add(self.repeat_word_button) + self.v_buttonbox.add(self.get_def_button) + self.v_buttonbox.add(self.get_usage_button) + self.v_buttonbox.add(self.get_word_length_button) + + self.v_buttonbox.show_all() + + self.button_frame = gtk.Frame("Buttons") + self.button_frame.add(self.v_buttonbox) + self.button_frame.show() + + self.vcontainer_right.add(self.button_frame) + + self.stats_frame = gtk.Frame("Stats") + + self.stats_table = gtk.Table(4,2,True) + + self.score_label = gtk.Label("Score: ") + self.score_value_label = gtk.Label("s") + #self.score_value_label. + + self.skill_level_label = gtk.Label("Skill Level: ") + self.skill_level_value_label = gtk.Label("sl") + + self.words_played_label = gtk.Label("Words played: ") + self.words_played_value_label = gtk.Label("wp") + + self.words_correct_label = gtk.Label("Correct Words: ") + self.words_correct_value_label = gtk.Label("cw") + + self.stats_table.attach(self.score_label, 0, 1, 0, 1) + self.stats_table.attach(self.score_value_label, 1, 2, 0, 1) + + self.stats_table.attach(self.skill_level_label, 0, 1, 1, 2) + self.stats_table.attach(self.skill_level_value_label, 1, 2, 1, 2) + + self.stats_table.attach(self.words_played_label, 0, 1, 2, 3) + self.stats_table.attach(self.words_played_value_label, 1, 2, 2, 3) + + self.stats_table.attach(self.words_correct_label, 0, 1, 3, 4) + self.stats_table.attach(self.words_correct_value_label, 1, 2, 3, 4) + + self.vcontainer_right.add(self.stats_frame) + self.stats_frame.add(self.stats_table) + + self.stats_frame.show_all() + + ################################################################ + + self.main_window.show() + + ##################Call Backs#################################### + + def submit_button_clicked(self, widget, data = None): + answer = self.text_input.get_text() + self.las.say_text("You typed") + self.shout(answer) + if answer == self.elem: + self.las.say_text("Correct") + self.las.ans_correct(self.wordid) + + else: + self.las.ans_incorrect(self.wordid) + self.las.say_text("Incorrect") + self.display_console("Incorrect. The correct spelling is.. ") + self.las.say_text("The correct spelling is..\n") + self.shout(self.elem) + self.update_all() + self.play_game("next word") + return False + + def text_input_focus(self, widget, event, data= None): + #print "text_input_focus_in" + return False + + def text_input_activate(self, widget, data=None): + self.submit_button_clicked(widget, data) + #print "text_input_activate" + return False + + def repeat_word_button_clicked(self, widget, data = None): + self.las.say_text(self.elem) + + def get_def_button_clicked(self, widget, data = None): + definition = self.las.get_word_info(self.wordid, "def") + self.display_console("Definition: ") + for (pos, definition) in definition: + self.display_console(pos + " : " + definition) + + def get_usage_button_clicked(self, widget, data = None): + if self.usage_used == 0: + usage = self.las.get_word_info(self.wordid, "usage") + self.total_num_usage = len(usage) + if self.total_num_usage == 0: + self.display_console("No usage in the database") + elif self.total_num_usage == self.usage_used: + self.display_console("No more usage in the database") + else: + (sample) = usage[self.usage_used] + las.say_text(sample) + self.usage_used = self.usage_used + 1 + + def get_word_length_button_clicked(self, widget, data = None): + self.display_console("Word Length: " + str(len(self.elem))) + + def ask_skill_level(self): + dialog = gtk.Dialog("Enter Skill Level", self.main_window, 0,(gtk.STOCK_OK, gtk.RESPONSE_OK, "Cancel", gtk.RESPONSE_CANCEL)) + self.las.say_text("Skill Level") + hbox = gtk.HBox(False, 8) + hbox.set_border_width(8) + dialog.vbox.pack_start(hbox, False, False, 0) + stock = gtk.image_new_from_stock( + gtk.STOCK_DIALOG_QUESTION, + gtk.ICON_SIZE_DIALOG) + hbox.pack_start(stock, False, False, 0) + + table = gtk.Table(1, 1) + table.set_row_spacings(4) + table.set_col_spacings(4) + hbox.pack_start(table, True, True, 0) + + label = gtk.Label("Skill Level") + label.set_use_underline(True) + table.attach(label, 0, 1, 0, 1) + local_skill_level = gtk.Entry() + local_skill_level.set_text(str(self.las.get_skill_level())) + table.attach(local_skill_level, 1, 2, 0, 1) + label.set_mnemonic_widget(local_skill_level) + + dialog.show_all() + response = dialog.run() + + if response == gtk.RESPONSE_OK: + skill_level = int (local_skill_level.get_text()) + + dialog.destroy() + self.las.set_skill_level(skill_level) + self.update_all() + + def shout(self,string): + self.display_console("") + for char in string: + self.display_console(char, newline = False) + self.las.say_text(char) + + ################################################################ + + #####################Update methods############################# + def update_all(self): + self.update_score() + self.update_skill_level() + self.update_words_played() + self.update_words_correct() + + def update_score(self, score = None): + if score ==None: + score = self.las.get_points() + self.score_value_label.set_text(str(score)) + + def update_skill_level(self, skill_level = None): + if skill_level ==None: + skill_level = self.las.get_skill_level() + self.skill_level_value_label.set_text(str(skill_level)) + + def update_words_played(self, words_played = None): + if words_played ==None: + words_played = self.las.get_words_played() + self.words_played_value_label.set_text(str(words_played)) + + def update_words_correct(self, words_correct = None): + if words_correct ==None: + words_correct = self.las.get_words_correct() + self.words_correct_value_label.set_text(str(words_correct)) + + def play_word(self): + self.usage_used = -1 + self.total_num_usage = -1 + + # Initilazing variable for eacch word + + self.elem = self.las.get_word_info(self.wordid, "word") #get a word from the list + self.pronounelem = self.las.get_word_info(self.wordid, "phnm") #get a pronounciation from the list + + self.display_console("Spell...") # say the explanation if the word is ambiguous. + if self.elem != self.pronounelem: # determine whether to bother pronouncing a description + + self.las.say_text("Spell... ... " + self.elem + "... " + self.pronounelem) + else: + #print "Spell... " + self.las.say_text("Spell... ... " + self.elem) + + def play_game(self,mode = "start"): + if mode == "start": + self.las.play_sound("begin") + self.this_level_size = 7 + self.this_level_max_error = 3 + self.display_label_a("Welcome") + self.las.say_text("Welcome") + self.ask_skill_level() + self.wordid_list = self.las.load_wordid(self.this_level_size + self.this_level_max_error) + self.this_level_num_words = len(self.wordid_list) + self.this_level_words_left = self.this_level_num_words + self.word_index = 1 + self.wordid = self.wordid_list[self.word_index] + self.play_word() + elif mode == "next word": + self.this_level_words_left -= 1 + if self.this_level_num_words == 0: + if self.las.words_correct == self.this_level_size: + self.display_console("You have crossed this level") + self.las.say_text("congratulation") + self.display_console("Please select new level to play the game") + else: + self.display_console("Sorry you are not able to cross this level") + self.las.say_text("Game Over") + self.display_console("Please select lower level to play the game") + self.play_game("start") + self.word_index += 1 + self.wordid = self.wordid_list[self.word_index] + self.play_word() + + ########################Display Methods######################### + + def display_console(self, text, newline = True ): + if newline == True: + text = "\n" + text + self.console_text_buffer.insert_at_cursor(text) + + def display_label_a(self, text): + self.label_v_left_a.set_text(text) + + def display_label_b(self, text): + self.label_v_left_b.set_text(text) + + ################################################################ + + ########################Game Logic############################## + + ################################################################ + + + + def main(self): + # All PyGTK applications must have a gtk.main(). Control ends here + # and waits for an event to occur (like a key press or mouse event). + gtk.main() + +# If the program is run directly or passed as an argument to the python +# interpreter then create a HelloWorld instance and show it +if __name__ == "__main__": + gui = LS_gui() + #gui.__init__() + gui.play_game("start") + gui.main() |