diff options
author | Gonzalo Odiard <godiard@gmail.com> | 2011-09-16 21:21:19 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@gmail.com> | 2011-09-16 21:40:01 (GMT) |
commit | 74362e63ca224bd7bdd1a6a6b016d91b973b911c (patch) | |
tree | dfc25a7080c7c9e083a413c1e0bdd4e56509e225 | |
parent | 02f202019aa2e9f0281218ca1f2a271bfbac3647 (diff) |
Pep8 and pylint fixes
Signed-of-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r-- | activity.py | 55 | ||||
-rw-r--r-- | audio.py | 1 | ||||
-rw-r--r-- | cardlist.py | 101 | ||||
-rw-r--r-- | cardtable.py | 51 | ||||
-rw-r--r-- | createcardpanel.py | 87 | ||||
-rw-r--r-- | createtoolbar.py | 23 | ||||
-rw-r--r-- | face.py | 3 | ||||
-rw-r--r-- | game.py | 107 | ||||
-rw-r--r-- | memorizetoolbar.py | 28 | ||||
-rw-r--r-- | messenger.py | 102 | ||||
-rw-r--r-- | model.py | 76 | ||||
-rw-r--r-- | playerscoreboard.py | 39 | ||||
-rw-r--r-- | score.py | 15 | ||||
-rw-r--r-- | scoreboard.py | 30 | ||||
-rw-r--r-- | svgcard.py | 51 | ||||
-rw-r--r-- | svglabel.py | 62 |
16 files changed, 422 insertions, 409 deletions
diff --git a/activity.py b/activity.py index a742316..77d08d3 100644 --- a/activity.py +++ b/activity.py @@ -37,9 +37,9 @@ import telepathy.client from sugar.activity.widgets import ActivityToolbarButton from sugar.activity.widgets import StopButton -from sugar.graphics.toolbarbox import ToolbarButton, ToolbarBox +from sugar.graphics.toolbarbox import ToolbarBox from sugar.graphics.radiotoolbutton import RadioToolButton -from sugar.activity.activity import Activity, ActivityToolbox +from sugar.activity.activity import Activity from sugar.presence import presenceservice from sugar.presence.tubeconn import TubeConnection @@ -61,13 +61,14 @@ PATH = '/org/laptop/Memorize' _MODE_PLAY = 1 _MODE_CREATE = 2 + class MemorizeActivity(Activity): - + def __init__(self, handle): Activity.__init__(self, handle) self.play_mode = None - + toolbar_box = ToolbarBox() self.set_toolbar_box(toolbar_box) @@ -165,7 +166,7 @@ class MemorizeActivity(Activity): self._memorizeToolbarBuilder.connect('game_changed', self.change_game) - + self.hbox = gtk.HBox(False) self.set_canvas(self.hbox) @@ -185,15 +186,15 @@ class MemorizeActivity(Activity): # Get the Presence Service self.pservice = presenceservice.get_instance() self.initiating = None - + # Buddy object for you owner = self.pservice.get_owner() self.owner = owner self.current = 0 - - self.game.set_myself(self.owner) + + self.game.set_myself(self.owner) self.connect('shared', self._shared_cb) - + # Owner.props.key if self._shared_activity: # We are joining the activity @@ -207,16 +208,16 @@ class MemorizeActivity(Activity): 'addition.zip') self.game.load_game(game_file, 4, 'demo') self.cardlist.load_game(self.game) - _logger.debug('loading conventional') + _logger.debug('loading conventional') self.game.add_buddy(self.owner) self.show_all() def _change_mode_bt(self, button): if button.get_active(): self._change_mode(button.mode) - + def read_file(self, file_path): - if self.metadata.has_key('icon-color'): + if 'icon-color' in self.metadata: color = self.metadata['icon-color'] else: color = profile.get_color().to_string() @@ -270,7 +271,7 @@ class MemorizeActivity(Activity): bsnd = self.game.model.pairs[pair].get_property('bsnd') if bsnd != None: if equal_pairs: - bsndfile = 'snd'+str(pair)+'.ogg' + bsndfile = 'snd' + str(pair) + '.ogg' else: bsndfile = 'bsnd' + str(pair) + '.ogg' game_zip.write(os.path.join(temp_snd_folder, bsnd), @@ -325,7 +326,7 @@ class MemorizeActivity(Activity): self.play_mode = True self._memorizeToolbarBuilder.update_controls(mode == _MODE_PLAY) self._createToolbarBuilder.update_controls(mode == _MODE_CREATE) - + def change_game(self, widget, game_name, size, mode, title=None, color=None): _logger.debug('Change game %s', game_name) @@ -353,10 +354,10 @@ class MemorizeActivity(Activity): self.conn = self._shared_activity.telepathy_conn self.tubes_chan = self._shared_activity.telepathy_tubes_chan self.text_chan = self._shared_activity.telepathy_text_chan - + self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].connect_to_signal( \ 'NewTube', self._new_tube_cb) - + self._shared_activity.connect('buddy-joined', self._buddy_joined_cb) self._shared_activity.connect('buddy-left', self._buddy_left_cb) @@ -386,7 +387,7 @@ class MemorizeActivity(Activity): _logger.debug('This is not my activity: waiting for a tube...') self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].ListTubes( - reply_handler=self._list_tubes_reply_cb, + reply_handler=self._list_tubes_reply_cb, error_handler=self._list_tubes_error_cb) def _new_tube_cb(self, identifier, initiator, tube_type, service, @@ -401,7 +402,7 @@ class MemorizeActivity(Activity): self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].AcceptDBusTube( \ identifier) - self.tube_conn = TubeConnection(self.conn, + self.tube_conn = TubeConnection(self.conn, self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES], identifier, group_iface=self.text_chan[telepathy.CHANNEL_INTERFACE_GROUP]) @@ -422,8 +423,8 @@ class MemorizeActivity(Activity): assert handle != 0 return self.pservice.get_buddy_by_telepathy_handle( \ self.tp_conn_name, self.tp_conn_path, handle) - - def _buddy_joined_cb (self, activity, buddy): + + def _buddy_joined_cb(self, activity, buddy): if buddy != self.owner: if buddy.props.nick == '': _logger.debug("buddy joined: empty nick=%s. Will not add.", @@ -432,7 +433,7 @@ class MemorizeActivity(Activity): _logger.debug("buddy joined: %s", buddy.props.nick) self.game.add_buddy(buddy) - def _buddy_left_cb (self, activity, buddy): + def _buddy_left_cb(self, activity, buddy): if buddy.props.nick == '': _logger.debug("buddy joined: empty nick=%s. Will not remove", buddy.props.nick) @@ -440,11 +441,11 @@ class MemorizeActivity(Activity): _logger.debug("buddy left: %s", buddy.props.nick) self.game.rem_buddy(buddy) - def _focus_in(self, event, data=None): + def _focus_in(self, event, data=None): self.game.audio.play() - - def _focus_out(self, event, data=None): + + def _focus_out(self, event, data=None): self.game.audio.pause() - - def _cleanup_cb(self, data=None): - self.game.audio.stop() + + def _cleanup_cb(self, data=None): + self.game.audio.stop() @@ -20,6 +20,7 @@ import logging _logger = logging.getLogger('memorize-activity') + class Audio(object): def __init__(self): self._player = gst.element_factory_make('playbin', 'player') diff --git a/cardlist.py b/cardlist.py index 1e692e5..d0bec83 100644 --- a/cardlist.py +++ b/cardlist.py @@ -18,11 +18,10 @@ import gtk import svgcard import logging -from os.path import join, exists +from os.path import join import shutil from model import Pair -#from model import Model from gobject import SIGNAL_RUN_FIRST, TYPE_PYOBJECT @@ -33,8 +32,9 @@ import theme _logger = logging.getLogger('memorize-activity') + class CardList(gtk.EventBox): - + __gsignals__ = { 'pair-selected': (SIGNAL_RUN_FIRST, None, 9 * [TYPE_PYOBJECT]), 'update-create-toolbar': (SIGNAL_RUN_FIRST, None, 3 * [TYPE_PYOBJECT]), @@ -42,10 +42,10 @@ class CardList(gtk.EventBox): def __init__(self): gtk.EventBox.__init__(self) - #self.model = Model() self.pairs = [] self.current_pair = None self.current_game_key = None + self.model = None self.vbox = gtk.VBox(False) @@ -53,16 +53,16 @@ class CardList(gtk.EventBox): fill_box.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#000000')) fill_box.show() self.vbox.pack_end(fill_box, True, True) - + scroll = gtk.ScrolledWindow() scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scroll.add_with_viewport(self.vbox) scroll.set_border_width(0) - scroll.get_child().modify_bg(gtk.STATE_NORMAL, + scroll.get_child().modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#000000')) self.add(scroll) self.show_all() - + def load_game(self, game): self.model = game.model self.current_game_key = self.model.data['game_file'] @@ -76,26 +76,26 @@ class CardList(gtk.EventBox): game_pairs[key].props.aimg)) else: aimg = None - + if game_pairs[key].props.bimg != None: bimg = gtk.gdk.pixbuf_new_from_file( \ join(self.model.data['pathimg'], game_pairs[key].props.bimg)) else: bimg = None - + if game_pairs[key].props.asnd != None: asnd = join(self.model.data['pathsnd'], game_pairs[key].props.asnd) else: asnd = None - - if game_pairs[key].props.bsnd != None: + + if game_pairs[key].props.bsnd != None: bsnd = join(self.model.data['pathsnd'], game_pairs[key].props.bsnd) else: bsnd = None - + self.add_pair(None, game_pairs[key].props.achar, game_pairs[key].props.bchar, aimg, bimg, asnd, bsnd, game_pairs[key].props.aspeak, game_pairs[key].props.bspeak, @@ -113,7 +113,6 @@ class CardList(gtk.EventBox): for pair in range(len(self.pairs)): pair_card = Pair() - # achar achar = self.pairs[pair].get_text(1) if achar != '': @@ -141,7 +140,7 @@ class CardList(gtk.EventBox): aimgfile = 'aimg' + str(pair) + '.jpg' pair_card.set_property('aimg', aimgfile) aimg.save(join(temp_img_folder, aimgfile), 'jpeg', - {'quality':'85'}) + {'quality': '85'}) # bimg bimg = self.pairs[pair].get_pixbuf(2) if bimg != None: @@ -151,32 +150,32 @@ class CardList(gtk.EventBox): bimgfile = 'bimg' + str(pair) + '.jpg' pair_card.set_property('bimg', bimgfile) bimg.save(join(temp_img_folder, bimgfile), 'jpeg', - {'quality':'85'}) + {'quality': '85'}) # asnd asnd = self.pairs[pair].get_sound(1) - logging.debug('update_model asnd %s' % asnd) + logging.debug('update_model asnd %s', asnd) if asnd != None: if equal_pairs: asndfile = 'snd' + str(pair) + '.ogg' else: - asndfile = 'asnd' + str(pair) + '.ogg' + asndfile = 'asnd' + str(pair) + '.ogg' pair_card.set_property('asnd', asndfile) shutil.move(asnd, join(temp_snd_folder, asndfile)) # bsnd bsnd = self.pairs[pair].get_sound(2) - logging.debug('update_model bsnd %s' % bsnd) + logging.debug('update_model bsnd %s', bsnd) if bsnd != None: if equal_pairs: - bsndfile = 'snd'+str(pair)+'.ogg' + bsndfile = 'snd' + str(pair) + '.ogg' else: - bsndfile = 'bsnd' + str(pair) + '.ogg' + bsndfile = 'bsnd' + str(pair) + '.ogg' shutil.move(bsnd, join(temp_snd_folder, bsndfile)) pair_card.set_property('bsnd', bsndfile) - + game_model.pairs[pair] = pair_card - def clean_list(self, button = None, load=False): + def clean_list(self, button=None, load=False): if button != None: self.current_game_key = None map(lambda x: self.vbox.remove(x), self.pairs) @@ -184,9 +183,9 @@ class CardList(gtk.EventBox): self.pairs = [] if not load: self.model.mark_modified() - + def add_pair(self, widget, achar, bchar, aimg, bimg, asnd, bsnd, - aspeak, bspeak, show = True, load=False): + aspeak, bspeak, show=True, load=False): pair = CardPair(achar, bchar, aimg, bimg, asnd, bsnd, aspeak, bspeak) self.vbox.pack_end(pair, False, True) self.pairs.append(pair) @@ -196,9 +195,9 @@ class CardList(gtk.EventBox): self.model.mark_modified() if show: self.show_all() - + def rem_pair(self, widget, event): - self.vbox.remove(widget) + self.vbox.remove(widget) self.pairs.remove(widget) del widget self.model.mark_modified() @@ -209,13 +208,17 @@ class CardList(gtk.EventBox): if self.current_pair is not None: current_pair = self.current_pair current_pair.set_selected(False) - self.current_pair = widget + self.current_pair = widget widget.set_selected(True) self.emit('pair-selected', True, - self.current_pair.get_text(1), self.current_pair.get_text(2), - self.current_pair.get_pixbuf(1), self.current_pair.get_pixbuf(2), - self.current_pair.get_sound(1), self.current_pair.get_sound(2), - self.current_pair.get_speak(1), self.current_pair.get_speak(2)) + self.current_pair.get_text(1), + self.current_pair.get_text(2), + self.current_pair.get_pixbuf(1), + self.current_pair.get_pixbuf(2), + self.current_pair.get_sound(1), + self.current_pair.get_sound(2), + self.current_pair.get_speak(1), + self.current_pair.get_speak(2)) def update_selected(self, widget, newtext1, newtext2, aimg, bimg, asnd, bsnd, aspeak, bspeak): @@ -225,7 +228,7 @@ class CardList(gtk.EventBox): self.current_pair.change_speak(aspeak, bspeak) self.model.mark_modified() - + class CardPair(gtk.EventBox): __gsignals__ = { @@ -233,8 +236,8 @@ class CardPair(gtk.EventBox): 'pair-closed': (SIGNAL_RUN_FIRST, None, [TYPE_PYOBJECT]), } - def __init__(self, text1, text2 = None, aimg = None, bimg = None, - asnd = None, bsnd = None, aspeak=None, bspeak=None): + def __init__(self, text1, text2=None, aimg=None, bimg=None, + asnd=None, bsnd=None, aspeak=None, bspeak=None): gtk.EventBox.__init__(self) self.bg_color = '#000000' @@ -248,12 +251,12 @@ class CardPair(gtk.EventBox): row.props.spacing = 10 self.bcard1 = svgcard.SvgCard(-1, - { 'front_text' : { 'card_text' : text1, - 'speak' : aspeak, - 'text_color' : '#ffffff' }, - 'front' : { 'fill_color' : '#4c4d4f', - 'stroke_color' : '#ffffff', - 'opacity' : '1' } }, + {'front_text': {'card_text': text1, + 'speak': aspeak, + 'text_color': '#ffffff'}, + 'front': {'fill_color': '#4c4d4f', + 'stroke_color': '#ffffff', + 'opacity': '1'}}, None, theme.PAIR_SIZE, 1, self.bg_color) self.bcard1.flip() self.bcard1.set_pixbuf(aimg) @@ -262,12 +265,12 @@ class CardPair(gtk.EventBox): row.pack_start(align) self.bcard2 = svgcard.SvgCard(-1, - { 'front_text' : { 'card_text' : text2, - 'speak' : bspeak, - 'text_color' : '#ffffff' }, - 'front' : { 'fill_color' : '#4c4d4f', - 'stroke_color' : '#ffffff', - 'opacity' : '1' } }, + {'front_text': {'card_text': text2, + 'speak': bspeak, + 'text_color': '#ffffff'}, + 'front': {'fill_color': '#4c4d4f', + 'stroke_color': '#ffffff', + 'opacity': '1'}}, None, theme.PAIR_SIZE, 1, self.bg_color) self.bcard2.flip() self.bcard2.set_pixbuf(bimg) @@ -305,15 +308,15 @@ class CardPair(gtk.EventBox): self.bg_color = '#000000' else: self.bg_color = '#b2b3b7' - + self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.bg_color)) self.bcard1.set_background(self.bg_color) self.bcard2.set_background(self.bg_color) - + def change_pixbuf(self, aimg, bimg): self.bcard1.set_pixbuf(aimg) self.bcard2.set_pixbuf(bimg) - + def change_text(self, text1, text2): self.bcard1.change_text(text1) self.bcard2.change_text(text2) diff --git a/cardtable.py b/cardtable.py index 1f251e2..b9ab29f 100644 --- a/cardtable.py +++ b/cardtable.py @@ -20,7 +20,6 @@ import pango import svgcard import os import math -import gc from gobject import SIGNAL_RUN_FIRST, TYPE_PYOBJECT import logging @@ -28,6 +27,7 @@ _logger = logging.getLogger('memorize-activity') import theme + class CardTable(gtk.EventBox): __gsignals__ = { @@ -60,7 +60,7 @@ class CardTable(gtk.EventBox): self.load_message = gtk.Label('Loading Game') self.load_message.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffffff')) - self.load_message.modify_font(pango.FontDescription("10")) + self.load_message.modify_font(pango.FontDescription('10')) self.load_message.show() self.first_load = True self.load_mode = False @@ -105,7 +105,7 @@ class CardTable(gtk.EventBox): self.selected_card = [0, 0] self.flipped_card = -1 self.table_positions = {} - + # Build the table if data['divided'] == '1': text1 = str(self.data.get('face1', '')) @@ -124,25 +124,26 @@ class CardTable(gtk.EventBox): else: jpg = None props = {} - props['front_text'] = {'card_text':card.get('char', ''), + props['front_text'] = {'card_text': card.get('char', ''), 'speak': card.get('speak')} if card['ab'] == 'a': - props['back_text'] = {'card_text':text1} + props['back_text'] = {'card_text': text1} elif card['ab'] == 'b': - props['back_text'] = {'card_text':text2} + props['back_text'] = {'card_text': text2} align = self.data.get('align', '1') card = svgcard.SvgCard(identifier, props, jpg, self.card_size, align) card.connect('enter-notify-event', self.mouse_event, [x, y]) - card.connect("button-press-event", self.flip_card_mouse, identifier) + card.connect('button-press-event', + self.flip_card_mouse, identifier) self.table_positions[(x, y)] = 1 self.cd2id[card] = identifier self.id2cd[identifier] = card self.cards[(x, y)] = card self.dict[identifier] = (x, y) - self.table.attach(card, x, x+1, y, y+1, gtk.SHRINK, gtk.SHRINK) + self.table.attach(card, x, x + 1, y, y + 1, gtk.SHRINK, gtk.SHRINK) x += 1 if x == self.size: @@ -164,7 +165,7 @@ class CardTable(gtk.EventBox): self.load_game(None, data, grid) def get_card_size(self, size_table): - x = (self._workspace_size + theme.CARD_PAD * (size_table-1)) / \ + x = (self._workspace_size + theme.CARD_PAD * (size_table - 1)) / \ size_table - theme.CARD_PAD * 2 return x @@ -181,45 +182,45 @@ class CardTable(gtk.EventBox): y = self.selected_card[1] if event.keyval in (gtk.keysyms.Left, gtk.keysyms.KP_Left): - if self.table_positions.has_key((x-1, y)): - card = self.cards[x-1, y] + if (x - 1, y) in self.table_positions: + card = self.cards[x - 1, y] identifier = self.cd2id.get(card) self.emit('card-highlighted', identifier, False) elif event.keyval in (gtk.keysyms.Right, gtk.keysyms.KP_Right): - if self.table_positions.has_key((x+1, y)): - card = self.cards[x+1, y] + if (x + 1, y) in self.table_positions: + card = self.cards[x + 1, y] identifier = self.cd2id.get(card) self.emit('card-highlighted', identifier, False) elif event.keyval in (gtk.keysyms.Up, gtk.keysyms.KP_Up): - if self.table_positions.has_key((x, y-1)): - card = self.cards[x, y-1] + if (x, y - 1) in self.table_positions: + card = self.cards[x, y - 1] identifier = self.cd2id.get(card) self.emit('card-highlighted', identifier, False) - + elif event.keyval in (gtk.keysyms.Down, gtk.keysyms.KP_Down): - if self.table_positions.has_key((x, y+1)): - card = self.cards[x, y+1] + if (x, y + 1) in self.table_positions: + card = self.cards[x, y + 1] identifier = self.cd2id.get(card) self.emit('card-highlighted', identifier, False) elif event.keyval in (gtk.keysyms.space, gtk.keysyms.KP_Page_Down): card = self.cards[x, y] self.card_flipped(card) - + def flip_card_mouse(self, widget, event, identifier): position = self.dict[identifier] card = self.cards[position] self.card_flipped(card) def card_flipped(self, card): - identifer = self.cd2id[card] + identifer = self.cd2id[card] if card.is_flipped(): self.emit('card-overflipped', identifer) else: self.emit('card-flipped', identifer, False) - + def set_border(self, widget, identifer, stroke_color, fill_color): self.id2cd[identifer].set_border(stroke_color, fill_color) @@ -240,7 +241,7 @@ class CardTable(gtk.EventBox): def reset(self, widget): for identifer in self.id2cd.keys(): self.id2cd[identifer].reset() - + def _set_load_mode(self, mode): if mode: self.remove(self.table) @@ -251,10 +252,10 @@ class CardTable(gtk.EventBox): self.load_mode = mode self.queue_draw() while gtk.events_pending(): - gtk.main_iteration() - + gtk.main_iteration() + def load_msg(self, widget, msg): if not self.load_mode: self._set_load_mode(True) self.load_message.set_text(msg) - self.queue_draw() + self.queue_draw() diff --git a/createcardpanel.py b/createcardpanel.py index 04a410c..dcf2f19 100644 --- a/createcardpanel.py +++ b/createcardpanel.py @@ -30,7 +30,7 @@ from sugar.graphics.toolbutton import ToolButton from sugar.graphics.icon import Icon from sugar.graphics.palette import Palette from port.widgets import ToggleToolButton -from port.widgets import CanvasRoundBox, ToolComboBox +from port.widgets import ToolComboBox from port import chooser import theme @@ -40,6 +40,7 @@ import speak.face _logger = logging.getLogger('memorize-activity') + class CreateCardPanel(gtk.EventBox): __gsignals__ = { 'add-pair': (SIGNAL_RUN_FIRST, None, 8 * [TYPE_PYOBJECT]), @@ -116,41 +117,45 @@ class CreateCardPanel(gtk.EventBox): def emit_add_pair(self, widget): self._addbutton.set_sensitive(False) if self.equal_pairs: - self.emit('add-pair', self.cardeditor1.get_text(), - self.cardeditor1.get_text(), - self.cardeditor1.get_pixbuf(), - self.cardeditor1.get_pixbuf(), - self.cardeditor1.get_snd(), self.cardeditor1.get_snd(), - self.cardeditor1.get_speak(), self.cardeditor1.get_speak() - ) + self.emit('add-pair', self.cardeditor1.get_text(), + self.cardeditor1.get_text(), + self.cardeditor1.get_pixbuf(), + self.cardeditor1.get_pixbuf(), + self.cardeditor1.get_snd(), + self.cardeditor1.get_snd(), + self.cardeditor1.get_speak(), + self.cardeditor1.get_speak()) else: - self.emit('add-pair', self.cardeditor1.get_text(), - self.cardeditor2.get_text(), - self.cardeditor1.get_pixbuf(), - self.cardeditor2.get_pixbuf(), - self.cardeditor1.get_snd(), self.cardeditor2.get_snd(), - self.cardeditor1.get_speak(), self.cardeditor2.get_speak() - ) + self.emit('add-pair', self.cardeditor1.get_text(), + self.cardeditor2.get_text(), + self.cardeditor1.get_pixbuf(), + self.cardeditor2.get_pixbuf(), + self.cardeditor1.get_snd(), + self.cardeditor2.get_snd(), + self.cardeditor1.get_speak(), + self.cardeditor2.get_speak()) self.clean(None) def emit_update_pair(self, widget): self._addbutton.set_sensitive(False) if self.equal_pairs: - self.emit('update-pair', self.cardeditor1.get_text(), - self.cardeditor1.get_text(), - self.cardeditor1.get_pixbuf(), - self.cardeditor1.get_pixbuf(), - self.cardeditor1.get_snd(), self.cardeditor1.get_snd(), - self.cardeditor1.get_speak(), self.cardeditor1.get_speak() - ) + self.emit('update-pair', self.cardeditor1.get_text(), + self.cardeditor1.get_text(), + self.cardeditor1.get_pixbuf(), + self.cardeditor1.get_pixbuf(), + self.cardeditor1.get_snd(), + self.cardeditor1.get_snd(), + self.cardeditor1.get_speak(), + self.cardeditor1.get_speak()) else: - self.emit('update-pair', self.cardeditor1.get_text(), - self.cardeditor2.get_text(), - self.cardeditor1.get_pixbuf(), - self.cardeditor2.get_pixbuf(), - self.cardeditor1.get_snd(), self.cardeditor2.get_snd(), - self.cardeditor1.get_speak(), self.cardeditor2.get_speak() - ) + self.emit('update-pair', self.cardeditor1.get_text(), + self.cardeditor2.get_text(), + self.cardeditor1.get_pixbuf(), + self.cardeditor2.get_pixbuf(), + self.cardeditor1.get_snd(), + self.cardeditor2.get_snd(), + self.cardeditor1.get_speak(), + self.cardeditor2.get_speak()) self.clean(None) def pair_selected(self, widget, selected, newtext1, newtext2, aimg, bimg, @@ -212,8 +217,8 @@ class CreateCardPanel(gtk.EventBox): def _update_buttom_status(self): if not self.equal_pairs: if (self._card1_has_text or self._card1_has_picture \ - or self._card1_has_sound) and (self._card2_has_text - or self._card2_has_picture + or self._card1_has_sound) and (self._card2_has_text + or self._card2_has_picture or self._card2_has_sound): self._addbutton.set_sensitive(True) self._updatebutton.set_sensitive(self._updatebutton_sensitive) @@ -233,6 +238,7 @@ class CreateCardPanel(gtk.EventBox): self.cardeditor1.temp_folder = temp_folder self.cardeditor2.temp_folder = temp_folder + class CardEditor(gtk.EventBox): __gsignals__ = { @@ -257,11 +263,11 @@ class CardEditor(gtk.EventBox): box.pack_start(self.previewlabel, False) self.card = svgcard.SvgCard(-1, - { 'front_text' : { 'card_text' : '', - 'text_color' : '#ffffff' }, - 'front_border': { 'fill_color' : '#4c4d4f', - 'stroke_color' : '#ffffff', - 'opacity' : '1' } }, + {'front_text': {'card_text': '', + 'text_color': '#ffffff'}, + 'front_border': {'fill_color': '#4c4d4f', + 'stroke_color': '#ffffff', + 'opacity': '1'}}, None, theme.PAIR_SIZE, 1, '#c0c0c0') self.card.flip() card_align = gtk.Alignment(.5, .5, 0, 0) @@ -351,8 +357,8 @@ class CardEditor(gtk.EventBox): self.set_speak(None) pixbuf_t = gtk.gdk.pixbuf_new_from_file_at_size( - index, theme.PAIR_SIZE - theme.PAD*2, - theme.PAIR_SIZE - theme.PAD*2) + index, theme.PAIR_SIZE - theme.PAD * 2, + theme.PAIR_SIZE - theme.PAD * 2) size = max(pixbuf_t.get_width(), pixbuf_t.get_height()) pixbuf_z = gtk.gdk.pixbuf_new_from_file_at_size( 'images/white.png', size, size) @@ -360,7 +366,7 @@ class CardEditor(gtk.EventBox): pixbuf_t.get_height(), 0, 0, 1, 1, gtk.gdk.INTERP_BILINEAR, 255) self.card.set_pixbuf(pixbuf_z) - _logger.debug('Picture Loaded: '+index) + _logger.debug('Picture Loaded: ' + index) self.emit('has-picture', True) del pixbuf_t del pixbuf_z @@ -383,7 +389,7 @@ class CardEditor(gtk.EventBox): style.XLARGE_ICON_SIZE, 0) self.card.set_pixbuf(pixbuf_t) self.emit('has-sound', True) - _logger.debug('Audio Loaded: '+dst) + _logger.debug('Audio Loaded: ' + dst) chooser.pick(parent=self.get_toplevel(), what=chooser.AUDIO, @@ -420,6 +426,7 @@ class CardEditor(gtk.EventBox): self.usespeak.props.active = False self.usespeak.palette.face.shut_up() + class SpeakPalette(Palette): def __init__(self, editor): Palette.__init__(self, _('Pronounce text during tile flip')) diff --git a/createtoolbar.py b/createtoolbar.py index 38decdd..7d96e15 100644 --- a/createtoolbar.py +++ b/createtoolbar.py @@ -20,34 +20,32 @@ from gettext import gettext as _ import gtk import gobject from gobject import SIGNAL_RUN_FIRST, TYPE_PYOBJECT -import logging - + from sugar.graphics.toolbutton import ToolButton -from sugar.graphics.toolbarbox import ToolbarButton from sugar.graphics.toggletoolbutton import ToggleToolButton -from sugar.graphics.toolcombobox import ToolComboBox from sugar.graphics.alert import Alert from sugar.graphics.icon import Icon + class CreateToolbarBuilder(gobject.GObject): __gtype_name__ = 'CreateToolbar' __gsignals__ = { - 'create_new_game': (SIGNAL_RUN_FIRST, None, []), - 'create_equal_pairs': (SIGNAL_RUN_FIRST, None, [TYPE_PYOBJECT]), + 'create_new_game': (SIGNAL_RUN_FIRST, None, []), + 'create_equal_pairs': (SIGNAL_RUN_FIRST, None, [TYPE_PYOBJECT]), } - + def __init__(self, activity): gobject.GObject.__init__(self) self.activity = activity self.toolbar = self.activity.get_toolbar_box().toolbar - + self._equal_pairs = ToggleToolButton('pair-non-equals') self._equal_pairs.set_tooltip(_('Click for equal pairs')) self._equal_pairs.connect('toggled', self._emit_equal_pairs) self.toolbar.insert(self._equal_pairs, -1) - + self._grouped = ToggleToolButton('grouped_game1') self._grouped.set_tooltip(_('Click for grouped game')) self._grouped.connect('toggled', self._grouped_cb) @@ -59,7 +57,7 @@ class CreateToolbarBuilder(gobject.GObject): self.toolbar.insert(self._clear_button, -1) self.toolbar.show_all() - + def _add_widget(self, widget, expand=False): tool_item = gtk.ToolItem() tool_item.set_expand(expand) @@ -100,7 +98,7 @@ class CreateToolbarBuilder(gobject.GObject): self._equal_pairs.set_named_icon('pair-non-equals') self._equal_pairs.set_tooltip(_('Click for equal pairs')) self.activity.game.model.data['equal_pairs'] = '0' - + def _grouped_cb(self, widget): if self._grouped.get_active(): self._grouped.set_named_icon('grouped_game2') @@ -110,8 +108,7 @@ class CreateToolbarBuilder(gobject.GObject): self._grouped.set_named_icon('grouped_game1') self._grouped.set_tooltip(_('Click for grouped game')) self.activity.game.model.data['divided'] = '0' - + def update_create_toolbar(self, widget, game_name, equal_pairs, grouped): - logging.debug('update_create_toolbar game_name %s eq pairs : %s grouped %s', game_name, equal_pairs, grouped) self._equal_pairs.set_active(equal_pairs == '1') self._grouped.set_active(grouped == '1') @@ -23,6 +23,7 @@ import speak.espeak import speak.face import theme + class Face(gtk.EventBox): def __init__(self): gtk.EventBox.__init__(self) @@ -46,6 +47,7 @@ class Face(gtk.EventBox): pixbuf = card._read_icon_data('front') self.window.draw_pixbuf(None, pixbuf, 0, 0, 0, 0) + def look_at(): if not speak.espeak.supported: return @@ -57,6 +59,7 @@ def look_at(): if i.parent: i.face.look_at(x, y) + def acquire(): if not speak.espeak.supported: return None @@ -24,7 +24,7 @@ from gobject import SIGNAL_RUN_FIRST, TYPE_PYOBJECT, GObject, timeout_add from gobject import source_remove from model import Model -from audio import Audio +from audio import Audio import theme _logger = logging.getLogger('memorize-activity') @@ -35,7 +35,7 @@ PATH = '/org/laptop/Memorize' class MemorizeGame(GObject): - + __gsignals__ = { 'reset_scoreboard': (SIGNAL_RUN_FIRST, None, []), 'reset_table': (SIGNAL_RUN_FIRST, None, []), @@ -56,7 +56,7 @@ class MemorizeGame(GObject): 'msg_buddy': (SIGNAL_RUN_FIRST, None, 2 * [TYPE_PYOBJECT]), 'change-turn': (SIGNAL_RUN_FIRST, None, [TYPE_PYOBJECT]), } - + def __init__(self): gobject.GObject.__init__(self) self.myself = None @@ -77,7 +77,7 @@ class MemorizeGame(GObject): self.audio = Audio() def load_game(self, game_name, size, mode): - self.set_load_mode('Loading game') + self.set_load_mode('Loading game') if self.model.read(game_name) == 0: logging.debug('load_game set is_demo mode %s', mode) self.model.is_demo = (mode == 'demo') @@ -89,19 +89,16 @@ class MemorizeGame(GObject): self.emit('load_game', self.model.data, self.model.grid) else: logging.error(' Reading setup file %s', game_name) - - def load_remote(self, grid, data, mode, signal = False): + + def load_remote(self, grid, data, mode, signal=False): self.set_load_mode(_('Loading game...')) self.model.grid = grid self.model.data = data self.model.data['mode'] = mode self.emit('reset_scoreboard') if not signal: - self.emit('change_game_signal', - mode, - self.get_grid(), - self.model.data, - self.waiting_players, + self.emit('change_game_signal', mode, self.get_grid(), + self.model.data, self.waiting_players, self.model.data['game_file']) self.emit('change_game', self.model.data, self.get_grid()) for buddy in self.players: @@ -111,12 +108,12 @@ class MemorizeGame(GObject): self.last_highlight = 1 self.change_turn() self.model.data['running'] = 'False' - + for card in self.model.grid: - if card['state'] == '1': + if card['state'] == '1': self.emit('flip-card', self.model.grid.index(card), False) self.last_flipped = self.model.grid.index(card) - elif card['state'] != '0': + elif card['state'] != '0': stroke_color, fill_color = card['state'].split(',') self.emit('flip-card', self.model.grid.index(card), False) self.emit('set-border', self.model.grid.index(card), @@ -125,17 +122,17 @@ class MemorizeGame(GObject): if mode != 'reset': self.model.is_demo = (mode == 'demo') - def add_buddy(self, buddy, score = 0): + def add_buddy(self, buddy, score=0): _logger.debug('Buddy %r was added to game', buddy.props.nick) self.players.append(buddy) self.players_score[buddy] = score self.emit('add_buddy', buddy, score) logging.debug(str(buddy)) - + if self.current_player == None: self.current_player = buddy self.change_turn() - + def rem_buddy(self, buddy): _logger.debug('Buddy %r was removed from game', buddy.props.nick) if self.current_player == buddy and len(self.players) >= 2: @@ -144,17 +141,17 @@ class MemorizeGame(GObject): self.model.grid[self.last_flipped]['state'] = '0' self.last_flipped = -1 self.change_turn() - index = self.players.index(buddy) + index = self.players.index(buddy) del self.players[index] del (self.players_score[buddy]) self.emit('rem_buddy', buddy) - + def buddy_message(self, buddy, text): self.emit('msg_buddy', buddy, text) def update_turn(self): self.set_sensitive(self.current_player == self.myself) - self.emit('change-turn', self.current_player) + self.emit('change-turn', self.current_player) def change_turn(self): if len(self.players) <= 1: @@ -165,14 +162,14 @@ class MemorizeGame(GObject): self.current_player = self.players[0] else: next_player = self.players.index(self.current_player) + 1 - self.current_player = self.players[next_player] + self.current_player = self.players[next_player] self.update_turn() - def card_overflipped(self, widget, identifier): + def card_overflipped(self, widget, identifier): if self._flop_cards and identifier in self._flop_cards: self.card_flipped(widget, identifier) - def card_flipped(self, widget, identifier, signal = False): + def card_flipped(self, widget, identifier, signal=False): self.model.count = self.model.count + 1 if self._flop_cards: source_remove(self._flop_card_timeout) @@ -182,22 +179,22 @@ class MemorizeGame(GObject): if (not self.sentitive and not signal) or \ self.last_flipped == identifier: return - + # Handle groups if needed if self.model.data.get('divided') == '1': if self.last_flipped == -1 and identifier \ - >= (len(self.model.grid)/2): + >= (len(self.model.grid) / 2): return if self.last_flipped != -1 and identifier \ - < (len(self.model.grid)/2): + < (len(self.model.grid) / 2): return - + # do not process flips when flipping back if self.flip_block: return else: self.flip_block = True - + self.model.data['running'] = 'True' def flip_card(full_animation): @@ -209,13 +206,13 @@ class MemorizeGame(GObject): if snd != None: sound_file = join(self.model.data.get('pathsnd'), snd) self.audio.play(sound_file) - + # First card case if self.last_flipped == -1: flip_card(full_animation=True) self.last_flipped = identifier - self.model.grid[identifier]['state'] = '1' + self.model.grid[identifier]['state'] = '1' self.flip_block = False # Second card case @@ -223,22 +220,22 @@ class MemorizeGame(GObject): # Pair matched pair_key_1 = self.model.grid[self.last_flipped]['pairkey'] pair_key_2 = self.model.grid[identifier]['pairkey'] - + if pair_key_1 == pair_key_2: flip_card(full_animation=False) stroke_color, fill_color = \ self.current_player.props.color.split(',') self.emit('set-border', identifier, stroke_color, fill_color) - self.emit('set-border', self.last_flipped, + self.emit('set-border', self.last_flipped, stroke_color, fill_color) - + self.increase_point(self.current_player) self.model.grid[identifier]['state'] = \ self.current_player.props.color self.model.grid[self.last_flipped]['state'] = \ self.current_player.props.color - self.flip_block = False + self.flip_block = False self.emit('cement-card', identifier) self.emit('cement-card', self.last_flipped) @@ -253,7 +250,7 @@ class MemorizeGame(GObject): self._flop_card_timeout = timeout_add(theme.FLOP_BACK_TIMEOUT, self.flop_card, identifier, self.last_flipped) self.last_flipped = -1 - + def flop_card(self, identifier, identifier2): self._flop_card_timeout = -1 self._flop_cards = None @@ -262,7 +259,7 @@ class MemorizeGame(GObject): self.model.grid[identifier]['state'] = '0' self.emit('flop-card', identifier2) self.model.grid[identifier2]['state'] = '0' - + #if self.model.data['divided'] == '1': # self.card_highlighted(widget, -1, False) self.set_sensitive(True) @@ -272,16 +269,16 @@ class MemorizeGame(GObject): def card_highlighted(self, widget, identifier, mouse): self.emit('highlight-card', self.last_highlight, False) self.last_highlight = identifier - + if identifier == -1 or not self.sentitive: return if self.model.data['divided'] == '1': if self.last_flipped == -1 and identifier \ - >= (len(self.model.grid)/2): + >= (len(self.model.grid) / 2): return if self.last_flipped != -1 and identifier \ - < (len(self.model.grid)/2): + < (len(self.model.grid) / 2): return if mouse and self.model.grid[identifier]['state'] == '0' or not mouse: @@ -291,7 +288,7 @@ class MemorizeGame(GObject): self.players_score[buddy] += inc for i_ in range(inc): self.emit('increase-score', buddy) - + def get_grid(self): return self.model.grid @@ -301,9 +298,9 @@ class MemorizeGame(GObject): score = self.players_score[player] self.model.data[str(index)] = str(score) return self.model.data - + def change_game(self, widget, game_name, size, mode, - title = None, color= None): + title=None, color=None): if mode in ['file', 'demo']: logging.debug('change_game set is_demo mode %s', mode) self.model.is_demo = (mode == 'demo') @@ -313,26 +310,26 @@ class MemorizeGame(GObject): if size == None: size = int(self.model.data['size']) self.model.def_grid(size) - + if title != None: self.model.data['title'] = title if color != None: self.model.data['color'] = color self.load_remote(self.model.grid, self.model.data, mode, False) - - def reset_game(self, size = None): + + def reset_game(self, size=None): if size == None: size = int(self.model.data['size']) self.model.count = 0 - self.model.def_grid(size) - self.load_remote(self.model.grid, self.model.data, False) - + self.model.def_grid(size) + self.load_remote(self.model.grid, self.model.data, False) + def set_load_mode(self, msg): - self.emit('load_mode', msg) - + self.emit('load_mode', msg) + def set_messenger(self, messenger): self.messenger = messenger - + def set_sensitive(self, status): self.sentitive = status if not status: @@ -340,10 +337,10 @@ class MemorizeGame(GObject): def get_sensitive(self): return self.sentitive - + def get_current_player(self): return self.current_player - + def get_players_data(self): data = [] for player, score in self.players_score.items(): @@ -372,11 +369,11 @@ class MemorizeGame(GObject): self.waiting_players.remove(buddy) self.players.append(buddy) self.emit('wait_mode_buddy', buddy, False) - + def load_waiting_list(self, wait_list): for buddy in wait_list: self.add_to_waiting_list(buddy) - + def empty_waiting_list(self): for buddy in self.waiting_players: self.rem_to_waiting_list(buddy) diff --git a/memorizetoolbar.py b/memorizetoolbar.py index 59c566a..12330b4 100644 --- a/memorizetoolbar.py +++ b/memorizetoolbar.py @@ -15,7 +15,6 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -import gtk import gobject from os.path import join, dirname @@ -34,7 +33,7 @@ _logger = logging.getLogger('memorize-activity') class MemorizeToolbarBuilder(gobject.GObject): __gtype_name__ = 'MemoryToolbarBuilder' - + standard_game_names = ['Load demo games', 'addition', 'letters', @@ -49,7 +48,7 @@ class MemorizeToolbarBuilder(gobject.GObject): __gsignals__ = { 'game_changed': (SIGNAL_RUN_FIRST, None, 5 * [TYPE_PYOBJECT]) } - + def __init__(self, activity): gobject.GObject.__init__(self) self.activity = activity @@ -65,11 +64,11 @@ class MemorizeToolbarBuilder(gobject.GObject): 'changed', self._game_size_cb) self.toolbar.insert(self._size_combo, -1) self._size_combo.combo.set_active(0) - - # Change demo games combobox + + # Change demo games combobox self._game_combo = ToolComboBox() for i, f in enumerate(self.standard_game_names): - f = _(f) + f = _(f) self._game_combo.combo.append_item(i, f) self._game_combo.combo.set_active(0) self._game_combo.combo.connect('changed', self._game_changed_cb) @@ -86,22 +85,21 @@ class MemorizeToolbarBuilder(gobject.GObject): def _game_reset_cb(self, widget): self._restart_button.set_sensitive(False) self.emit('game_changed', None, None, 'reset', None, None) - + def update_controls(self, active): self._size_combo.set_sensitive(active) self._game_combo.set_sensitive(active) self._restart_button.set_sensitive(active and self.activity.game.model.count > 0) - - def card_flipped(self, widget, identifier, signal = False): + + def card_flipped(self, widget, identifier, signal=False): self._restart_button.set_sensitive(self.activity.game.model.count > 0) def _game_size_cb(self, widget): game_size = int(self._sizes[self._size_combo.combo.get_active()][0]) self.emit('game_changed', None, game_size, 'size', None, None) - + def _game_changed_cb(self, combobox): - logging.debug('Game modified %s is_demo %s', self.activity.game.model.modified, self.activity.game.model.is_demo) if combobox.get_active() == 0: return if self.activity.game.model.is_demo: @@ -127,18 +125,18 @@ class MemorizeToolbarBuilder(gobject.GObject): game_name = self.standard_game_names[current_game] title = game_name game_size = int(self._sizes[self._size_combo.combo.get_active()][0]) - + if game_name in self.translated_game_names: index = self.translated_game_names.index(game_name) game_name = self.standard_game_names[index] - - game_file = join(dirname(__file__), 'demos', game_name+'.zip') + + game_file = join(dirname(__file__), 'demos', game_name + '.zip') self._game_combo.combo.set_active(0) self.emit('game_changed', game_file, game_size, 'demo', title, None) def update_toolbar(self, widget, data, grid): size = data.get('size') self._size_combo.combo.handler_block(self.size_handle_id) - size_index = self._sizes.index(size+' X '+size) + size_index = self._sizes.index(size + ' X ' + size) self._size_combo.combo.set_active(int(size_index)) self._size_combo.combo.handler_unblock(self.size_handle_id) diff --git a/messenger.py b/messenger.py index 91b07da..3cbd7e7 100644 --- a/messenger.py +++ b/messenger.py @@ -30,8 +30,9 @@ SERVICE = 'org.laptop.Memorize' IFACE = SERVICE PATH = '/org/laptop/Memorize' + class Messenger(ExportedGObject): - + def __init__(self, tube, is_initiator, get_buddy, game): ExportedGObject.__init__(self, tube, PATH) self._tube = tube @@ -39,7 +40,7 @@ class Messenger(ExportedGObject): self._get_buddy = get_buddy self.game = game self.ordered_bus_names = [] - self.entered = False + self.entered = False self._tube.watch_participants(self.participant_change_cb) self.files = {} @@ -56,20 +57,20 @@ class Messenger(ExportedGObject): else: self._hello_signal() self.entered = True - - # hello methods - + + # hello methods + @signal(IFACE, signature='') def _hello_signal(self): pass - + def _hello_handler(self): - self._tube.add_signal_receiver(self._hello_receiver, - '_hello_signal', - IFACE, - path=PATH, + self._tube.add_signal_receiver(self._hello_receiver, + '_hello_signal', + IFACE, + path=PATH, sender_keyword='sender') - + def _hello_receiver(self, sender=None): self.ordered_bus_names.append(sender) data = self.game.model.data @@ -80,13 +81,10 @@ class Messenger(ExportedGObject): self.file_sender(sender, path, title, color) remote_object = self._tube.get_object(sender, PATH) - remote_object.load_game(self.ordered_bus_names, - self.game.get_grid(), - self.game.collect_data(), - self.game.players.index(self.game.current_player), - #self.game.waiting_players, - path) - + remote_object.load_game(self.ordered_bus_names, + self.game.get_grid(), self.game.collect_data(), + self.game.players.index(self.game.current_player), path) + @method(dbus_interface=IFACE, in_signature='asaa{ss}a{ss}ns', out_signature='', byte_arrays=True) def load_game(self, bus_names, grid, data, current_player, path): @@ -104,28 +102,28 @@ class Messenger(ExportedGObject): self._flip_handler() self._change_game_handler() - + def change_game(self, sender, mode, grid, data, waiting_list, zip): path = self.game.model.data['game_file'] - + if mode == 'file': title = data.get('title', 'Received game') - color = data.get('color', '') - self.file_sender('all', path, title, color) + color = data.get('color', '') + self.file_sender('all', path, title, color) self._change_game_signal(mode, grid, data, path) - + def _change_game_handler(self): - self._tube.add_signal_receiver(self._change_game_receiver, - '_change_game_signal', - IFACE, path=PATH, - sender_keyword='sender', + self._tube.add_signal_receiver(self._change_game_receiver, + '_change_game_signal', + IFACE, path=PATH, + sender_keyword='sender', byte_arrays=True) - + @signal(IFACE, signature='saa{ss}a{ss}s') def _change_game_signal(self, mode, grid, data, path): pass - + def _change_game_receiver(self, mode, grid, data, path, sender=None): # ignore my own signal if sender == self._tube.get_unique_name(): @@ -137,13 +135,13 @@ class Messenger(ExportedGObject): self.game.model.read(game_file) if mode == 'file': self.game.model.read(self.files[path]) - - if self.game.model.data.has_key('path'): + + if 'path' in self.game.model.data: data['path'] = self.game.model.data['path'] data['pathimg'] = self.game.model.data['pathimg'] data['pathsnd'] = self.game.model.data['pathsnd'] self.game.load_remote(grid, data, mode, True) - + # File transfer methods def file_sender(self, target, filename, title, color): @@ -156,20 +154,20 @@ class Messenger(ExportedGObject): self._file_part_signal(target, filename, part + 1, num_parts, bytes, title, color) f.close() - + @signal(dbus_interface=IFACE, signature='ssuuayss') def _file_part_signal(self, target, filename, part, numparts, bytes, title, color): pass - + def _file_part_handler(self): - self._tube.add_signal_receiver(self._file_part_receiver, - '_file_part_signal', - IFACE, - path=PATH, - sender_keyword='sender', + self._tube.add_signal_receiver(self._file_part_receiver, + '_file_part_signal', + IFACE, + path=PATH, + sender_keyword='sender', byte_arrays=True) - + def _file_part_receiver(self, target, filename, part, numparts, bytes, title=None, color=None, sender=None): # ignore my own signal @@ -178,7 +176,7 @@ class Messenger(ExportedGObject): if target != self._tube.get_unique_name() and target != 'all': return - + # first chunk if part == 1: tmp_root = join(environ['SUGAR_ACTIVITY_ROOT'], 'instance') @@ -187,16 +185,16 @@ class Messenger(ExportedGObject): self.temp_file = join(temp_dir, 'game.zip') self.files[filename] = self.temp_file self.f = open(self.temp_file, 'a+b') - + self.f.write(bytes) - + percentage = int(float(part) / float(numparts) * 100.0) self.game.set_load_mode(_('Receiving game') + ': ' + str(percentage) + '% ' + _('done') + '.') # last chunk if part == numparts: - self.f.close() + self.f.close() #file = self.files[filename] # Saves the zip in datastore gameObject = datastore.create() @@ -207,19 +205,17 @@ class Messenger(ExportedGObject): datastore.write(gameObject) #gameObject.destroy() - - # flip card methods - + # flip card methods def flip_sender(self, widget, id): self._flip_signal(id) - + def _flip_handler(self): - self._tube.add_signal_receiver(self._flip_receiver, - '_flip_signal', - IFACE, - path=PATH, + self._tube.add_signal_receiver(self._flip_receiver, + '_flip_signal', + IFACE, + path=PATH, sender_keyword='sender') - + @signal(IFACE, signature='n') def _flip_signal(self, card_number): pass @@ -28,25 +28,26 @@ from sugar.activity.activity import get_bundle_path, get_activity_root _logger = logging.getLogger('model') + class Pair(gobject.GObject): __gproperties__ = { - 'aimg' : (str, None, None, None, gobject.PARAM_READWRITE), - 'asnd' : (str, None, None, None, gobject.PARAM_READWRITE), + 'aimg': (str, None, None, None, gobject.PARAM_READWRITE), + 'asnd': (str, None, None, None, gobject.PARAM_READWRITE), 'achar': (str, None, None, None, gobject.PARAM_READWRITE), - 'bimg' : (str, None, None, None, gobject.PARAM_READWRITE), - 'bsnd' : (str, None, None, None, gobject.PARAM_READWRITE), + 'bimg': (str, None, None, None, gobject.PARAM_READWRITE), + 'bsnd': (str, None, None, None, gobject.PARAM_READWRITE), 'bchar': (str, None, None, None, gobject.PARAM_READWRITE), 'aspeak': (str, None, None, None, gobject.PARAM_READWRITE), 'bspeak': (str, None, None, None, gobject.PARAM_READWRITE), - 'color' : (gobject.TYPE_INT, 'Base', 'Base', 0, 10, 0, \ + 'color': (gobject.TYPE_INT, 'Base', 'Base', 0, 10, 0, \ gobject.PARAM_READWRITE) } def __init__(self): gobject.GObject.__init__(self) - self._properties = {'aimg':None, 'asnd':None, 'achar':None, 'bimg':None, - 'bsnd':None, 'bchar':None, 'color':100, - 'aspeak':None, 'bspeak':None} + self._properties = {'aimg': None, 'asnd': None, 'achar': None, + 'bimg': None, 'bsnd': None, 'bchar': None, + 'color': 100, 'aspeak': None, 'bspeak': None} def do_get_property(self, pspec): """Retrieve a particular property from our property dictionary @@ -122,7 +123,7 @@ class Model(object): self.dtd = libxml2.parseDTD(None, join(get_bundle_path(), 'memorize.dtd')) except libxml2.parserError, e: - _logger.error('Init: no memorize.dtd found ' +str(e)) + _logger.error('Init: no memorize.dtd found ' + str(e)) self.dtd = None self.ctxt = libxml2.newValidCtxt() @@ -155,7 +156,7 @@ class Model(object): self.data['path'] = self.temp_folder self.data['pathimg'] = join(self.data['path'], 'images') self.data['pathsnd'] = join(self.data['path'], 'sounds') - + ''' extracts files in the zip file ''' game_name = basename(game_file)[:-4] zipFile = zipfile.ZipFile(game_file, "r") @@ -168,14 +169,14 @@ class Model(object): file(join(directory, name), 'wb').write(zipFile.read(each)) self.pairs = {} - + ''' reads the configuration from an xml file ''' try: xml_file = join(environ['SUGAR_ACTIVITY_ROOT'], self.data['path'], 'game.xml') doc = libxml2.parseFile(xml_file) if doc.validateDtd(self.ctxt, self.dtd): - + # get the requested nodes xpa = doc.xpathNewContext() res = xpa.xpathEval("//*") @@ -189,7 +190,7 @@ class Model(object): for attribute in attributes: if(attribute.name == 'text'): pass - else: + else: pair.set_property(attribute.name, attribute.content) self.pairs[str(idpair)] = pair @@ -198,19 +199,19 @@ class Model(object): for attribute in attributes: if(attribute.name == 'text'): pass - elif(attribute.name == 'name'): + elif(attribute.name == 'name'): self.data['name'] = attribute.content elif(attribute.name == 'scoresnd'): self.data['scoresnd'] = attribute.content - elif(attribute.name == 'winsnd'): + elif(attribute.name == 'winsnd'): self.data['winsnd'] = attribute.content - elif(attribute.name == 'divided'): + elif(attribute.name == 'divided'): self.data['divided'] = attribute.content - elif(attribute.name == 'face'): + elif(attribute.name == 'face'): self.data['face'] = attribute.content - elif(attribute.name == 'face1'): + elif(attribute.name == 'face1'): self.data['face1'] = attribute.content - elif(attribute.name == 'face2'): + elif(attribute.name == 'face2'): self.data['face2'] = attribute.content elif(attribute.name == 'align'): self.data['align'] = attribute.content @@ -224,43 +225,43 @@ class Model(object): doc.freeDoc() return 0 except libxml2.parserError, e: - _logger.error('Read: Error parsing file ' +str(e)) + _logger.error('Read: Error parsing file ' + str(e)) return 2 - + def write(self): ''' writes the configuration to an xml file ''' doc = libxml2.newDoc("1.0") root = doc.newChild(None, "memorize", None) - - if(self.data.get('name', None) != None): + + if(self.data.get('name', None) != None): root.setProp("name", self.data['name']) - + if(self.data.get('divided', None) != None): root.setProp('divided', '1') root.setProp('face1', '1') root.setProp('face2', '2') else: root.setProp('divided', '0') - + if(self.data.get('equal_pairs', None) != None): root.setProp('equal_pairs', self.data['equal_pairs']) - - if(self.data.get('scoresnd', None) != None): + + if(self.data.get('scoresnd', None) != None): root.setProp("scoresnd", self.data['scoresnd']) - if(self.data.get('winsnd', None) != None): + if(self.data.get('winsnd', None) != None): root.setProp("winsnd", self.data['winsnd']) - if(self.data.get('divided', None) != None): + if(self.data.get('divided', None) != None): root.setProp("divided", self.data['divided']) - if(self.data.get('face', None) != None): + if(self.data.get('face', None) != None): root.setProp("face", self.data['face']) - if(self.data.get('face1', None) != None): + if(self.data.get('face1', None) != None): root.setProp("face1", self.data['face1']) - if(self.data.get('face2', None) != None): + if(self.data.get('face2', None) != None): root.setProp("face2", self.data['face2']) - if(self.data.get('align', None) != None): + if(self.data.get('align', None) != None): root.setProp("align", self.data['align']) - for key in self.pairs: + for key in self.pairs: elem = root.newChild(None, "pair", None) if self.pairs[key].props.aimg != None: elem.setProp("aimg", self.pairs[key].props.aimg) @@ -288,12 +289,11 @@ class Model(object): return 2 doc.freeDoc() return 0 - def def_grid(self, size): ''' create the grid for the play from the pairs information and shuffles the grid so they always appear in a different - place + place ''' psize = (size * size / 2) _logger.debug('Size requested: %d', psize) @@ -339,8 +339,8 @@ class Model(object): i += 1 else: break - - numpairs = len(self.pairs) + + numpairs = len(self.pairs) if numpairs < psize: _logger.debug('Defgrid: Not enough pairs, requested=%s had=%s' % (psize, numpairs)) diff --git a/playerscoreboard.py b/playerscoreboard.py index 99b11bb..5c8db14 100644 --- a/playerscoreboard.py +++ b/playerscoreboard.py @@ -27,11 +27,12 @@ import theme _logger = logging.getLogger('memorize-activity') -class PlayerScoreboard(gtk.EventBox): - - def __init__(self, nick, fill_color, stroke_color, score = 0): + +class PlayerScoreboard(gtk.EventBox): + + def __init__(self, nick, fill_color, stroke_color, score=0): gtk.EventBox.__init__(self) - + self.default_color = '#4c4d4f' self.selected_color = '#818286' self.current_color = '#4c4d4f' @@ -43,24 +44,24 @@ class PlayerScoreboard(gtk.EventBox): self.stroke_color = stroke_color self.connect('size-allocate', self._allocate_cb) - + # Set table self.table = gtk.Table(2, 2, False) self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.current_color)) - self.table.set_row_spacings(theme.PAD/2) - self.table.set_col_spacings(theme.PAD/2) + self.table.set_row_spacings(theme.PAD / 2) + self.table.set_col_spacings(theme.PAD / 2) self.table.set_border_width(theme.PAD) - + # Score table self.score_table = gtk.Table() - self.score_table.set_row_spacings(theme.PAD/2) - self.score_table.set_col_spacings(theme.PAD/2) + self.score_table.set_row_spacings(theme.PAD / 2) + self.score_table.set_col_spacings(theme.PAD / 2) self.scores = [] self.current_x = 0 self.current_y = 0 - + # Set buddy icon self.xo_buddy = join(dirname(__file__), 'images', 'stock-buddy.svg') self.icon = svglabel.SvgLabel(self.xo_buddy, fill_color, stroke_color, @@ -70,12 +71,12 @@ class PlayerScoreboard(gtk.EventBox): self.waiting_icon = svglabel.SvgLabel(self.xo_buddy, \ self.default_color, '#ffffff', False, self.current_color, theme.BODY_WIDTH, theme.BODY_HEIGHT) - + # Set nick label self.nick = gtk.Label(nick) self.nick.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffffff')) self.nick.set_alignment(0, 0.5) - + # Set message label self.msg = gtk.Label('Waiting for next game...') self.msg.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffffff')) @@ -102,7 +103,7 @@ class PlayerScoreboard(gtk.EventBox): if self._score_cols == 0: return - rows = int(math.ceil(float(size/2) / self._score_cols)) + rows = int(math.ceil(float(size / 2) / self._score_cols)) self.score_table.resize(rows, self._score_cols) self.score_table.set_size_request(-1, (theme.SCORE_SIZE + theme.PAD / 2) * (rows) - theme.PAD / 2) @@ -116,19 +117,19 @@ class PlayerScoreboard(gtk.EventBox): else: score_pixbuf_unsel = None score_pixbuf_sel = None - + new_score = Score(self.fill_color, self.stroke_color, score_pixbuf_sel, score_pixbuf_unsel, self.status) self.scores.append(new_score) new_score.show() - self.score_table.attach(new_score, self.current_x , self.current_x + 1, + self.score_table.attach(new_score, self.current_x, self.current_x + 1, self.current_y, self.current_y + 1, gtk.SHRINK, gtk.SHRINK) self.current_x += 1 if self.current_x == self._score_cols: self.current_x = 0 self.current_y += 1 self.queue_draw() - + def set_selected(self, sel): self.status = sel if sel: @@ -150,7 +151,7 @@ class PlayerScoreboard(gtk.EventBox): del self.scores self.scores = [] self.queue_draw() - + def set_wait_mode(self, status): if status: self.table.remove(self.icon) @@ -164,6 +165,6 @@ class PlayerScoreboard(gtk.EventBox): if len(self.scores) == 0: self.table.remove(self.msg) self.queue_draw() - + def set_message(self, msg): self.msg.set_text(msg) @@ -21,12 +21,13 @@ import os import theme + class Score(svglabel.SvgLabel): - + selected_color = "#818286" default_color = "#4c4d4f" status = False - + def __init__(self, fill_color, stroke_color, pixbuf=None, pixbuf_sel=None, status=False): filename = os.path.join(os.path.dirname(__file__), "images/score.svg") @@ -46,12 +47,12 @@ class Score(svglabel.SvgLabel): self.pixbuf = self.pixbuf_sel else: self.pixbuf = self.pixbuf_un - + svglabel.SvgLabel.__init__(self, filename, fill_color, stroke_color, self.pixbuf, self.default_color, theme.SCORE_SIZE, theme.SCORE_SIZE) self.set_selected(status) - + def set_selected(self, status): self.status = status if status: @@ -62,10 +63,10 @@ class Score(svglabel.SvgLabel): self.pixbuf = self.pixbuf_un self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.default_color)) - self.queue_draw() - + self.queue_draw() + def get_pixbuf_un(self): return self.pixbuf_un - + def get_pixbuf_sel(self): return self.pixbuf_sel diff --git a/scoreboard.py b/scoreboard.py index e11d3dd..4aa6997 100644 --- a/scoreboard.py +++ b/scoreboard.py @@ -21,6 +21,7 @@ from playerscoreboard import PlayerScoreboard _logger = logging.getLogger('memorize-activity') + class Scoreboard(gtk.EventBox): def __init__(self): gtk.EventBox.__init__(self) @@ -28,15 +29,15 @@ class Scoreboard(gtk.EventBox): self.players = {} self.current_buddy = None - self.vbox = gtk.VBox(False) - + self.vbox = gtk.VBox(False) + fill_box = gtk.EventBox() fill_box.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#4c4d4f')) fill_box.show() self.vbox.pack_end(fill_box, True, True) - + scroll = gtk.ScrolledWindow() - scroll.props.shadow_type = gtk.SHADOW_NONE + scroll.props.shadow_type = gtk.SHADOW_NONE scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) scroll.add_with_viewport(self.vbox) scroll.set_border_width(0) @@ -47,41 +48,40 @@ class Scoreboard(gtk.EventBox): def change_game(self, widget, data, grid): for buddy in self.players.keys(): self.players[buddy].change_game(len(grid)) - + def add_buddy(self, widget, buddy, score): ### FIXME: this breaks when the body is empty nick = buddy.props.nick stroke_color, fill_color = buddy.props.color.split(',') player = PlayerScoreboard(nick, fill_color, stroke_color, score) player.show() - self.players[buddy] = player + self.players[buddy] = player self.vbox.pack_start(player, False, False) if score == -1: player.set_wait_mode(True) self.show_all() - + def rem_buddy(self, widget, buddy): - self.vbox.remove(self.players[buddy]) - del self.players[buddy] ### fix for self.players[id] - + self.vbox.remove(self.players[buddy]) + del self.players[buddy] # fix for self.players[id] + def set_selected(self, widget, buddy): if self.current_buddy is not None: old = self.players[self.current_buddy] old.set_selected(False) - self.current_buddy = buddy + self.current_buddy = buddy player = self.players[buddy] player.set_selected(True) - + def set_buddy_message(self, widget, buddy, msg): self.players[buddy].set_message(msg) - + def increase_score(self, widget, buddy): self.players[buddy].increase_score() def reset(self, widget): for buddy in self.players.keys(): self.players[buddy].reset() - + def set_wait_mode(self, widget, buddy, status): self.players[buddy].set_wait_mode(status) - @@ -18,7 +18,6 @@ # from os.path import join, dirname -import gc import rsvg import re import gtk @@ -33,22 +32,27 @@ import speak.voice _logger = logging.getLogger('memorize-activity') + class SvgCard(gtk.EventBox): border_svg = join(dirname(__file__), 'images', 'card.svg') # Default properties default_props = {} - default_props['back'] = {'fill_color':'#b2b3b7', 'stroke_color':'#b2b3b7', - 'opacity':'1'} - default_props['back_h'] = {'fill_color':'#b2b3b7', - 'stroke_color':'#ffffff', 'opacity':'1'} - default_props['back_text'] = {'text_color':'#c7c8cc'} - default_props['front'] = {'fill_color':'#4c4d4f', 'stroke_color':'#ffffff', - 'opacity':'1'} - default_props['front_h'] = {'fill_color':'#555555', - 'stroke_color':'#888888', 'opacity':'1'} - default_props['front_text'] = {'text_color':'#ffffff'} + default_props['back'] = {'fill_color': '#b2b3b7', + 'stroke_color': '#b2b3b7', + 'opacity': '1'} + default_props['back_h'] = {'fill_color': '#b2b3b7', + 'stroke_color': '#ffffff', + 'opacity': '1'} + default_props['back_text'] = {'text_color': '#c7c8cc'} + default_props['front'] = {'fill_color': '#4c4d4f', + 'stroke_color': '#ffffff', + 'opacity': '1'} + default_props['front_h'] = {'fill_color': '#555555', + 'stroke_color': '#888888', + 'opacity': '1'} + default_props['front_text'] = {'text_color': '#ffffff'} cache = {} @@ -118,15 +122,15 @@ class SvgCard(gtk.EventBox): self.create_text_layout(props['card_text']) width, height = layout.get_pixel_size() - y = (self.size - height)/2 + y = (self.size - height) / 2 if self.flipped: - if self.align == '2': # top + if self.align == '2': # top y = 0 - elif self.align == '3': # bottom + elif self.align == '3': # bottom y = self.size - height widget.window.draw_layout(self.gc, layout=layout, - x=(self.size - width)/2, y=y, + x=(self.size - width) / 2, y=y, foreground=gtk.gdk.color_parse(props['text_color'])) return False @@ -135,7 +139,7 @@ class SvgCard(gtk.EventBox): icon_data = self.props[view] key = str(self.size) + icon_data.get('fill_color') + \ icon_data.get('stroke_color') - if self.cache.has_key(key): + if key in self.cache: return self.cache[key] icon_file = open(self.border_svg, 'r') @@ -154,15 +158,15 @@ class SvgCard(gtk.EventBox): data = re.sub('<!ENTITY opacity .*>', entity, data) data = re.sub('size_card1', str(self.size), data) - data = re.sub('size_card2', str(self.size-6), data) - data = re.sub('size_card3', str(self.size-17), data) + data = re.sub('size_card2', str(self.size - 6), data) + data = re.sub('size_card3', str(self.size - 17), data) pixbuf = rsvg.Handle(data=data).get_pixbuf() self.cache[key] = pixbuf return pixbuf def set_border(self, stroke_color, fill_color): - self.props['front'].update({'fill_color' : fill_color, - 'stroke_color' : stroke_color}) + self.props['front'].update({'fill_color': fill_color, + 'stroke_color': stroke_color}) self.queue_draw() while gtk.events_pending(): gtk.main_iteration() @@ -186,7 +190,7 @@ class SvgCard(gtk.EventBox): def get_pixbuf(self): return self.jpeg - def set_highlight(self, status, mouse = False): + def set_highlight(self, status, mouse=False): if self.flipped: if mouse: return @@ -236,14 +240,12 @@ class SvgCard(gtk.EventBox): speaking_face.face.say(self.get_text()) self.current_face = 'front' - self.flipped = True + self.flipped = True self.queue_draw() while gtk.events_pending(): gtk.main_iteration() - #gc.collect() - def cement(self): if not self.get_speak(): return @@ -336,6 +338,7 @@ class SvgCard(gtk.EventBox): def get_speak(self): return self.props['front_text'].get('speak') + def PIXELS_PANGO(x): return x * 1000 diff --git a/svglabel.py b/svglabel.py index ef2ab74..9991765 100644 --- a/svglabel.py +++ b/svglabel.py @@ -15,20 +15,20 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -import gtk, pygtk +import gtk import rsvg -import cairo import re + class SvgLabel(gtk.DrawingArea): - + filename = '' fill_color = '' stroke_color = '' background_color = '' - - - def __init__(self, filename, fill_color, stroke_color, pixbuf = False, background_color = '', request_x = 45, request_y = 45): + + def __init__(self, filename, fill_color, stroke_color, pixbuf=False, + background_color='', request_x=45, request_y=45): gtk.DrawingArea.__init__(self) self.set_size_request(request_x, request_y) self.filename = filename @@ -38,15 +38,16 @@ class SvgLabel(gtk.DrawingArea): self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(background_color)) if pixbuf: self.pixbuf = pixbuf - else: - self.pixbuf = self._read_icon_data(self.filename, self.fill_color, self.stroke_color) - + else: + self.pixbuf = self._read_icon_data(self.filename, self.fill_color, + self.stroke_color) + self.connect('expose-event', self._expose_cb) - + def _expose_cb(self, widget, event): widget.window.draw_pixbuf(None, self.pixbuf, 0, 0, 0, 0) return False - + def _read_icon_data(self, filename, fill_color, stroke_color): icon_file = open(filename, 'r') data = icon_file.read() @@ -62,38 +63,41 @@ class SvgLabel(gtk.DrawingArea): self.data_size = len(data) return rsvg.Handle(data=data).get_pixbuf() - + def set_color(self, fill_color, stroke_color): self.fill_color = fill_color self.stroke_color = stroke_color - self.pixmap = self._read_icon_data(self.filename, self.fill_color, self.stroke_color) - self.queue_draw() - + self.pixmap = self._read_icon_data(self.filename, self.fill_color, + self.stroke_color) + self.queue_draw() + def set_fill_color(self, fill_color): self.fill_color = fill_color - self.pixmap = self._read_icon_data(self.filename, self.fill_color, self.stroke_color) - self.queue_draw() - + self.pixmap = self._read_icon_data(self.filename, self.fill_color, + self.stroke_color) + self.queue_draw() + def get_fill_color(self): return self.fill_color - + def set_stroke_color(self, stroke_color): self.stroke_color = stroke_color - self.pixmap = self._read_icon_data(self.filename, self.fill_color, self.stroke_color) - self.queue_draw() - + self.pixmap = self._read_icon_data(self.filename, self.fill_color, + self.stroke_color) + self.queue_draw() + def get_stroke_color(self): return self.stroke_color - + def get_pixbuf(self): return self.pixbuf - + def set_pixbuf(self, pixbuf): self.pixbuf = pixbuf - self.queue_draw() - + self.queue_draw() + def set_background(self, background_color): self.background_color = background_color - self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.background_color)) - self.queue_draw() - + self.modify_bg(gtk.STATE_NORMAL, + gtk.gdk.color_parse(self.background_color)) + self.queue_draw() |