diff options
Diffstat (limited to 'ReckonPrimer.activity/display.py')
-rwxr-xr-x | ReckonPrimer.activity/display.py | 191 |
1 files changed, 123 insertions, 68 deletions
diff --git a/ReckonPrimer.activity/display.py b/ReckonPrimer.activity/display.py index ac0381e..4e93400 100755 --- a/ReckonPrimer.activity/display.py +++ b/ReckonPrimer.activity/display.py @@ -21,10 +21,13 @@ class Display: def __init__(self, window): self._permanent_gui_elements(window) self.errors = 0 - self._ex = None # WN091214 ??? - self._ex_key = None # + self._ex = None # needed for feedback_table etc + # TODO: imprive information hiding self._sett = None # setting updated by callbacks during input - self.running = False # first round of calculations WN091214 ??? + self.running = False # switch settings_/feedback_table TODO rename + self._coll_key = None # semaphore for self.finish_collect_callback + # and Collection.select_exerc_callback + self._testvar = 'FOUND' def register(self, sess, co, learner): """register _after_ Session and Coach have been instantiated""" @@ -85,9 +88,9 @@ class Display: self.scrolled_window.show() # 3 tables as overlays with same 15 lines and 6 columns - self.settings_table = gtk.Table(15, 6, True) - self.collection_table = gtk.Table(15, 6, True) - self.feedback_table = gtk.Table(15, 6, True) + self.settings_table = gtk.Table (14, 9, True) + self.collection_table = gtk.Table(14, 9, True) + self.feedback_table = gtk.Table (14, 9, True) # Insert the 3 tables into the right half of the screen self.table.attach(self.settings_table, 1, 2, 0, 5) @@ -95,9 +98,9 @@ class Display: self.table.attach(self.feedback_table, 1, 2, 0, 5) # show all tables, scrolled_window already shown above - self.settings_table.show() - self.collection_table.show() - self.feedback_table.show() + self.settings_table_show() # treat uniformly <>! + self.collection_table.show() # treat uniformly ! + self.feedback_table.show() # treat uniformly ! self.table.show() # since all other tables have been inserted def update_time(self): @@ -114,19 +117,46 @@ class Display: self.stopwatch_label.queue_draw() return True + def settings_table_show(self): # rename to .._permanent + """ Initialize all permanent gui-elements in settings_table. """ + # button releasing settings_table and coach.notify('setting-done',..) + self.see_butt = gtk.Button(None, gtk.STOCK_GO_FORWARD) + self.see_butt.connect("clicked", self.release_sett_callback) + #self.settings_table.attach(self.see_butt, 0, 5, 14, 15) + self.settings_table.attach(self.see_butt, 0, 8, 13, 14) + self.see_alignment = self.see_butt.get_children()[0] + self.see_hbox = self.see_alignment.get_children()[0] + self.see_image, self.see_label = self.see_hbox.get_children() + self.see_label.set_label("settings_table") + self.see_butt.show() + # button switching from settings_table to collect_table + self.sec_butt = gtk.Button("") + self.sec_butt.connect("clicked", self.switch_setts_to_coll_callback) + #self.settings_table.attach(self.sec_butt, 5, 6, 14, 15) + self.settings_table.attach(self.sec_butt, 8, 9, 13, 14) + self.sec_alignment = self.sec_butt.get_children()[0] + self.sec_butt.show() + + def switch_setts_to_coll_callback(self, widget): + """ Switch from settings_table to collection_table. """ + self.settings_table.hide() + self.collection_table.show() + def feedback_table_show(self): """RENAME to draw_feedback_screen""" # Section for stopwatch self.stopwatch = Timer() self.stopwatch_label = gtk.Label("00:00") self.stopwatch_label.modify_font(pango.FontDescription("sans 16")) - self.feedback_table.attach(self.stopwatch_label, 3, 5, 12, 13) + #self.feedback_table.attach(self.stopwatch_label, 3, 5, 12, 13) + self.feedback_table.attach(self.stopwatch_label, 4, 6, 12, 13) # Section for nickname self.name = profile.get_nick_name() self.name_label = gtk.Label(self.name) self.name_label.modify_font(pango.FontDescription("sans 16")) - self.feedback_table.attach(self.name_label, 0, 6, 13, 14) + #self.feedback_table.attach(self.name_label, 0, 6, 13, 14) + self.feedback_table.attach(self.name_label, 0, 9, 13, 14) # Section for progress bar self.progressbar = gtk.ProgressBar(adjustment=None) @@ -136,7 +166,7 @@ class Display: style.bg[gtk.STATE_PRELIGHT] = gtk.gdk.color_parse("green") self.progressbar.set_style (style) self.progressbar.set_fraction(0) - self.feedback_table.attach(self.progressbar, 0, 6, 8, 9) + self.feedback_table.attach(self.progressbar, 0, 9, 8, 9) # Labels for progress bar self.progress0 = gtk.Label("0") @@ -154,7 +184,8 @@ class Display: attr.insert(fg_color) self.correct_counter.set_attributes(attr) - self.feedback_table.attach(self.correct_counter, 2, 4, 9, 10 ) + #self.feedback_table.attach(self.correct_counter, 2, 4, 9, 10 ) + self.feedback_table.attach(self.correct_counter, 3, 5, 9, 10 ) self.false_count = 0 self.false_counter = gtk.Label(str(self.false_count)) @@ -166,7 +197,8 @@ class Display: attr.insert(fg_color) self.false_counter.set_attributes(attr) - self.feedback_table.attach(self.false_counter, 2, 4, 10, 11 ) + #self.feedback_table.attach(self.false_counter, 2, 4, 10, 11 ) + self.feedback_table.attach(self.false_counter, 3, 5, 10, 11 ) self.stopwatch_label.show() gobject.timeout_add(1000, self.update_time) @@ -179,9 +211,19 @@ class Display: self.total_calcs = self._ex.count() self.progress_total = gtk.Label(str(self.total_calcs)) self.progress_total.modify_font(pango.FontDescription("sans 16")) - self.feedback_table.attach(self.progress_total, 5, 6, 9, 10 ) + #self.feedback_table.attach(self.progress_total, 5, 6, 9, 10 ) + self.feedback_table.attach(self.progress_total, 8, 9, 9, 10 ) self.progress_total.show() + self.sfb_butt = gtk.Button(None, gtk.STOCK_STOP) + self.sfb_butt.connect("clicked", self.release_feedb_callback) + self.feedback_table.attach(self.sfb_butt, 0, 9, 13, 14) + self.sfb_alignment = self.sfb_butt.get_children()[0] + self.sfb_hbox = self.sfb_alignment.get_children()[0] + self.sfb_image, self.sfb_label = self.sfb_hbox.get_children() + self.sfb_label.set_label("feedback_table") + self.sfb_butt.show() + def feedback_table_hide(self): self.progressbar.set_fraction(0) self.stopwatch_label.hide() @@ -191,56 +233,35 @@ class Display: self.correct_counter.hide() self.false_counter.hide() self.progress_total.hide() + self.sfb_butt.hide() def offer_setting(self,ex): """ Prepare display for update of settings. """ self._ex = ex #WN.LV either drop this or self.current_exercise self._sett = self._ex.get_setting() #WN.LV make _sett local - ### START BUTTON BEGIN ### - self.start_button = gtk.Button(None, gtk.STOCK_GO_FORWARD) - self.start_button.connect("clicked", self.clicked_start_callback) - self.feedback_table.attach(self.start_button, 0, 6, 14, 15) - self.start_alignment = self.start_button.get_children()[0] - self.start_hbox = self.start_alignment.get_children()[0] - self.start_image, self.start_label = self.start_hbox.get_children() - self.start_label.set_label("") - self.start_button.show() - ### START BUTTON END ### - self.current_exercise = ex #WN.LV either drop this or self._ex - #print('in display.offer_setting, self._sett=', self._sett) + print('in display.offer_setting, topic=', self._sett['topic']) self.current_exercise.define_buttons() self.current_exercise.set_buttons(self._sett) + self.settings_table.show() + + def release_feedb_callback(self, widget): + """ """ + self.protocol('----------------------------------------', 0, 'OK') + print('in display.release_feedb_callback') + self.calc_table.destroy() + self.feedback_table_hide() + self.collection_table.show() # from here the next user-interactions + + def release_sett_callback(self, widget): + """ Start calcs with these settings (probably updated). """ + print('in display.release_sett_callback') + self._co.notify(('setting-done', self._ex._sett)) + self.settings_table.hide() + #self.collection_table.hide() + self.feedback_table_show() - def clicked_start_callback(self, widget): - """ Finish offer_setting, deliver settings (possibly updated) - and tell the coach to start the calculations of the exercise - ELIF - """ - if self.running == False: - self.running = True - self.start_button.set_label(gtk.STOCK_STOP) #stop-button - self.start_alignment = self.start_button.get_children()[0] - self.start_hbox = self.start_alignment.get_children()[0] - self.start_image, self.start_label = self.start_hbox.get_children() - self.start_label.set_label("") - self._co.notify(('setting-done', self._sett))# difference from here - self.settings_table.hide() - self.collection_table.hide() - self.feedback_table_show() - elif self.running == True: - self.protocol('----------------------------------------', 0, 'OK') - self.running = False - self.start_button.set_label(gtk.STOCK_GO_FORWARD)# >-button - self.start_alignment = self.start_button.get_children()[0] - self.start_hbox = self.start_alignment.get_children()[0] - self.start_image, self.start_label = self.start_hbox.get_children() - self.start_label.set_label("") - self.calc_table.destroy() # difference from here - self.feedback_table_hide() - self.settings_table.show() - self.collection_table.show() def init_calc(self): """ @@ -268,16 +289,6 @@ class Display: mark = self.log_buffer.create_mark(None, end_iterator, True) self.log_view.scroll_mark_onscreen(mark) -# def dis_calc(self, clist, cursor, errs): -# _i, _calc = 0, '' -# for _c in clist: -# _i = _i + 1 -# if (_i == cursor) & (errs > 0): -# _calc = _calc + '_' -# else: -# _calc = _calc + _c -# return _calc + ' ' + errs * '/' - def input_digit(self, widget, dig, proterr, protok): """callback: input a digit and give feedback. The _only_ other active widget is the <stop>-button on the right""" @@ -364,17 +375,61 @@ class Display: def offer_coll_to_learner(self, collect): """TODO: get the users choice from buttons above the settings""" collect.define_coll_gui() - collect.set_coll_gui() # sets callbacks + collect.set_coll_gui(collect) # sets callbacks + self.set_coll_to_learner() # set finish_learner_coll_butt + callb def switch_exercise(self): """ Another exercise has been selected. """ + #WN091215 DAS IST AB JETZT FALSCH: ex<->sett + ex<->coll moeglich self.settings_table.destroy() - self.settings_table = gtk.Table(15, 6, True) + self.settings_table = gtk.Table(14, 9, True) self.table.attach(self.settings_table, 1, 2, 0, 5) self.settings_table.show() self.feedback_table.destroy() - self.feedback_table = gtk.Table(15, 6, True) + self.feedback_table = gtk.Table(14, 9, True) self.table.attach(self.feedback_table, 1, 2, 0, 5) self.feedback_table.show() + def set_select_exerc_semaphore(self, coll_key): + """ Sets a semaphore for finish_collect_callback. """ + print('in display.set_select_exerc_semaphore, coll_key', self._coll_key) + self._coll_key = coll_key + + def set_coll_to_learner(self): + """ Set the permanent gui-elements for collection_table. """ + print('in display.set_coll_to_learner') + # button switching from collect_table to calcs + self.flc_butt = gtk.Button(None, gtk.STOCK_GO_FORWARD) + self.flc_butt.connect("clicked", self.finish_learner_coll_callback) + self.collection_table.attach(self.flc_butt, 0, 8, 13, 14) + self.flc_alignment = self.flc_butt.get_children()[0] + self.flc_hbox = self.flc_alignment.get_children()[0] + self.flc_image, self.flc_label = self.flc_hbox.get_children() + self.flc_label.set_label("to calcs") + self.flc_butt.show() + + # button switching from collect_table to settings_table + self.sts_butt = gtk.Button("") + self.sts_butt.connect("clicked", self.switch_learner_to_setts) + self.collection_table.attach(self.sts_butt, 8, 9, 13, 14) + self.sts_alignment = self.sts_butt.get_children()[0] + self.sts_butt.show() + + def finish_learner_coll_callback(self, widget): + """ Callback on flc_butt; uses self._coll_key as semaphore + from Collection.select_exerc_callback. """ + print('in display.finish_learner_coll_callback, _coll_key=', self._coll_key) + if not(self._coll_key is None): + self._co.notify(('exerc-selected', self._coll_key)) + self.collection_table.hide() + self.feedback_table_show() + + def switch_learner_to_setts(self, widget): + """ Callback on sts_butt. asks the Coach if allowed. """ + self._co.notify(('switch-to-setts', self._coll_key)) + self.collection_table.hide() + + def set_curr_exerc(self, exerc): + """ self._ex is needed for feedback_table etc. """ + self._ex = exerc |