diff options
author | Walter Bender <walter.bender@gmail.com> | 2013-02-01 23:44:57 (GMT) |
---|---|---|
committer | Walter Bender <walter.bender@gmail.com> | 2013-02-01 23:44:57 (GMT) |
commit | ffda647870496e7ec58f72029dc4e5c37e416b10 (patch) | |
tree | 7df2582853e0c6e219e1822a220829401f62cb2e /page.py | |
parent | f59b2031db0dde0291377243604551278024dd16 (diff) |
updates from .NI feedback
Diffstat (limited to 'page.py')
-rw-r--r-- | page.py | 91 |
1 files changed, 81 insertions, 10 deletions
@@ -23,10 +23,11 @@ from utils.play_audio import play_audio_from_file import logging _logger = logging.getLogger('iknowmyabcs-activity') +from sugar3 import profile from sugar3.graphics import style GRID_CELL_SIZE = style.GRID_CELL_SIZE -from genpieces import generate_card +from genpieces import generate_card, genblank from utils.sprites import Sprites, Sprite @@ -46,11 +47,14 @@ class Page(): self._images_path = images_path self._sounds_path = sounds_path + self._colors = profile.get_color().to_string().split(',') + self._card_data = [] self._color_data = [] self._image_data = [] self._media_data = [] # (image sound, letter sound) self._word_data = [] + self._deja_vu = [] # Starting from command line if self._activity is None: @@ -75,7 +79,7 @@ class Page(): self._grid_x_offset = int( (self._width - XDIM * (self._card_width + GUTTER * 2)) / 2) self._grid_y_offset = 0 - self._scale = self._card_width / 80 + self._scale = self._card_width / 80. self._sprites = Sprites(self._canvas) self.current_card = 0 self._cards = [] @@ -84,14 +88,44 @@ class Page(): self._release = None self.timeout = None + self._my_canvas = Sprite( + self._sprites, 0, 0, svg_str_to_pixbuf(genblank( + self._width, self._height, (self._colors[0], + self._colors[0])))) + self._my_canvas.type = 'background' + + self._smile = Sprite(self._sprites, + int(self._width / 4), + int(self._height / 4), + GdkPixbuf.Pixbuf.new_from_file_at_size( + os.path.join(self._activity.activity_path, + 'images', 'correct.png'), + int(self._width / 2), + int(self._height / 2))) + + self._frown = Sprite(self._sprites, + int(self._width / 4), + int(self._height / 4), + GdkPixbuf.Pixbuf.new_from_file_at_size( + os.path.join(self._activity.activity_path, + 'images', 'wrong.png'), + int(self._width / 2), + int(self._height / 2))) + self.load_level(os.path.join(self._lessons_path, 'alphabet' + '.csv')) self.new_page() + def _hide_feedback(self): + if hasattr(self, '_smile'): + self._smile.hide() + self._frown.hide() + def new_page(self, cardtype='alpha'): ''' Load a page of cards ''' if self.timeout is not None: GObject.source_remove(self.timeout) self._hide_cards() + self._hide_feedback() if cardtype == 'alpha': self._alpha_cards() else: @@ -159,7 +193,8 @@ class Page(): stroke = self._test_for_stroke() self._cards.append(Sprite(self._sprites, x, y, svg_str_to_pixbuf(generate_card( - string=card[0], + string='%s%s' % ( + card[0].upper(), card[0].lower()), colors=[self._color_data[self.current_card][0], '#FFFFFF'], stroke=stroke, @@ -180,15 +215,28 @@ class Page(): self._activity.status.set_text( _('Click on the card that corresponds to the sound.')) self.target = int(uniform(0, len(self._cards))) + # Don't repeat + while self.target in self._deja_vu: + self.target = int(uniform(0, len(self._cards))) + self._deja_vu.append(self.target) + if len(self._deja_vu) == len(self._cards): + self._deja_vu = [] if self.timeout is not None: GObject.source_remove(self.timeout) self.timeout = GObject.timeout_add(1000, self._play_target_sound) def _play_target_sound(self): - if self._activity.mode == 'find by letter': + if self._activity.mode in ['letter', 'find by letter']: + play_audio_from_file(os.path.join( + self._sounds_path, + self._media_data[self.target][1])) + elif self._activity.mode == 'picture': play_audio_from_file(os.path.join( self._sounds_path, self._media_data[self.target][1])) + GObject.timeout_add(1000, play_audio_from_file, os.path.join( + self._sounds_path, + self._media_data[self.target][0])) else: play_audio_from_file(os.path.join( self._sounds_path, @@ -211,23 +259,46 @@ class Page(): x, y = map(int, event.get_coords()) spr = self._sprites.find_sprite((x, y)) + if spr is None: + return + if spr.type == 'background': + return if spr in self._cards: self.current_card = self._cards.index(spr) elif spr in self._pictures: self.current_card = self._pictures.index(spr) if self._activity.mode in ['letter', 'picture']: - play_audio_from_file(os.path.join( - self._sounds_path, - self._media_data[self.current_card][1])) - elif self._activity.mode in ['find by letter', 'find by word']: + self.target = self.current_card + self._play_target_sound() + else: if self.current_card == self.target: self._activity.status.set_text(_('Very good!')) + self._play(True) if self.timeout is not None: GObject.source_remove(self.timeout) - self.timeout = GObject.timeout_add(1000, self.new_target) + self.timeout = GObject.timeout_add(1000, self._correct_feedback) else: self._activity.status.set_text(_('Please try again.')) - self._play_target_sound() + self._play(False) + if self.timeout is not None: + GObject.source_remove(self.timeout) + self.timeout = GObject.timeout_add(1000, self._wrong_feedback) + + def _correct_feedback(self): + self._hide_feedback() + self.new_target() + + def _wrong_feedback(self): + self._hide_feedback() + self._play_target_sound() + + def _play(self, great): + if great: + self._smile.set_layer(1000) + # play_audio_from_file(os.getcwd() + '/sounds/great.ogg') + else: + self._frown.set_layer(1000) + # play_audio_from_file(os.getcwd() + '/sounds/bad.ogg') def _keypress_cb(self, area, event): ''' No keyboard shortcuts at the moment. Perhaps jump to the page |