Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/page.py
diff options
context:
space:
mode:
authorWalter 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)
commitffda647870496e7ec58f72029dc4e5c37e416b10 (patch)
tree7df2582853e0c6e219e1822a220829401f62cb2e /page.py
parentf59b2031db0dde0291377243604551278024dd16 (diff)
updates from .NI feedback
Diffstat (limited to 'page.py')
-rw-r--r--page.py91
1 files changed, 81 insertions, 10 deletions
diff --git a/page.py b/page.py
index a5133b8..8485397 100644
--- a/page.py
+++ b/page.py
@@ -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