diff options
author | Rafael Ortiz <rafael@activitycentral.com> | 2011-09-27 17:23:17 (GMT) |
---|---|---|
committer | Rafael Ortiz <rafael@activitycentral.com> | 2011-09-27 17:23:17 (GMT) |
commit | a998a202ee7afe0ef283bbae8eb338294c004abc (patch) | |
tree | 373c8b05cc6a4037388507be1a0fb360ab9a9274 /memorizetoolbar.py | |
parent | 5a0c2083c7b04a5d4b30ef0a91ddcb4e0b236535 (diff) |
matching mainline
Diffstat (limited to 'memorizetoolbar.py')
-rw-r--r-- | memorizetoolbar.py | 193 |
1 files changed, 80 insertions, 113 deletions
diff --git a/memorizetoolbar.py b/memorizetoolbar.py index 782f818..98ddf0f 100644 --- a/memorizetoolbar.py +++ b/memorizetoolbar.py @@ -15,70 +15,46 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -import gtk +import gobject from os.path import join, dirname from gettext import gettext as _ from sugar.graphics.toolbutton import ToolButton from sugar.graphics.toolcombobox import ToolComboBox -from sugar.graphics.objectchooser import ObjectChooser -from sugar import profile +from sugar.graphics.alert import Alert +from sugar.graphics.icon import Icon +from sugar.activity.widgets import RadioMenuButton +from sugar.graphics.menuitem import MenuItem import logging from gobject import SIGNAL_RUN_FIRST, TYPE_PYOBJECT _logger = logging.getLogger('memorize-activity') -class MemorizeToolbar(gtk.Toolbar): - __gtype_name__ = 'MemoryToolbar' - - standard_game_names = ['Load demo games', - 'addition', + +class MemorizeToolbarBuilder(gobject.GObject): + + __gtype_name__ = 'MemoryToolbarBuilder' + + standard_game_names = ['addition', 'letters', 'sounds' ] - translated_game_names = [_('Load demo games'), - _('addition'), - _('letters'), - _('sounds') + translated_game_names = [_('Addition'), + _('Letters'), + _('Sounds') ] __gsignals__ = { 'game_changed': (SIGNAL_RUN_FIRST, None, 5 * [TYPE_PYOBJECT]) } - + def __init__(self, activity): - gtk.Toolbar.__init__(self) + gobject.GObject.__init__(self) self.activity = activity - self._lock = True + self.toolbar = self.activity.get_toolbar_box().toolbar self.jobject = None - - # Reset Button - restart_icon = join(dirname(__file__), 'images', 'game-restart.svg') - restart_image = gtk.Image() - restart_image.set_from_file(restart_icon) - self._restart_button = ToolButton() - self._restart_button.set_icon_widget(restart_image) - self._restart_button.connect('clicked', self._game_reset_cb) - self._restart_button.set_tooltip(_('Restart Game')) - self.insert(self._restart_button, -1) - self._restart_button.show() - - # Load Button - load_icon = join(dirname(__file__), 'images', 'game-load.svg') - load_image = gtk.Image() - load_image.set_from_file(load_icon) - self._load_button = ToolButton() - self._load_button.set_icon_widget(load_image) - self._load_button.set_tooltip(_('Load game')) - self._load_button.connect('clicked', self._load_game) - self._add_widget(self._load_button) - - # Separator - separator = gtk.SeparatorToolItem() - separator.set_draw(True) - self.insert(separator, -1) - + # Change size combobox self._size_combo = ToolComboBox() self._sizes = ['4 X 4', '5 X 5', '6 X 6'] @@ -86,87 +62,78 @@ class MemorizeToolbar(gtk.Toolbar): self._size_combo.combo.append_item(i, f) self.size_handle_id = self._size_combo.combo.connect( \ 'changed', self._game_size_cb) - self._add_widget(self._size_combo) + self.toolbar.insert(self._size_combo, -1) self._size_combo.combo.set_active(0) - - separator = gtk.SeparatorToolItem() - separator.set_draw(True) - self.insert(separator, -1) - self._lock = False - - # Change demo games combobox - self._game_combo = ToolComboBox() - for i, f in enumerate(self.standard_game_names): - 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) - self._add_widget(self._game_combo) - - def _add_widget(self, widget, expand=False): - tool_item = gtk.ToolItem() - tool_item.set_expand(expand) - tool_item.add(widget) - widget.show() - self.insert(tool_item, -1) - tool_item.show() - + + # Change demo games button + self._demo_games = RadioMenuButton(icon_name='memorize-collection') + self._demo_games.props.tooltip = _('Load demo games') + + for i, game in enumerate(self.translated_game_names): + menu_item = MenuItem(game) + menu_item.connect('activate', self.__activate_game_cb, i) + self._demo_games.props.palette.menu.append(menu_item) + menu_item.show() + self.toolbar.insert(self._demo_games, -1) + + # Reset Button + self._restart_button = ToolButton('game-new') + self._restart_button.connect('clicked', self._game_reset_cb) + self._restart_button.set_tooltip(_('Restart Game')) + self._restart_button.set_sensitive(False) + self.toolbar.insert(self._restart_button, -1) + self._restart_button.show() + def _game_reset_cb(self, widget): + self._restart_button.set_sensitive(False) + self.activity.game.model.count = 0 self.emit('game_changed', None, None, 'reset', None, None) - - def _load_game(self, button): - chooser = ObjectChooser(_('Choose memorize game'), - parent=self.activity, - flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) - jobject = '' - try: - result = chooser.run() - if result == gtk.RESPONSE_ACCEPT: - logging.debug('ObjectChooser: %r', - chooser.get_selected_object()) - jobject = chooser.get_selected_object() - if not jobject or not jobject.file_path: - return - finally: - chooser.destroy() - del chooser - - if jobject and jobject.file_path: - title = jobject.metadata['title'] - if jobject.metadata.has_key('icon-color'): - color = jobject.metadata['icon-color'] - else: - color = profile.get_color().to_string() - self.emit('game_changed', jobject.file_path, 4, - 'file', title, color) - - if self.jobject != None: - self.jobject.destroy() - self.jobject = jobject - + + def update_controls(self, active): + self._size_combo.set_sensitive(active) + self._demo_games.set_sensitive(active) + self._restart_button.set_sensitive(active and + self.activity.game.model.count > 0) + + 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): - if combobox.get_active() == 0: - return - current_game = self._game_combo.combo.get_active() - game_name = self.standard_game_names[current_game] - title = game_name + + def __activate_game_cb(self, menu, i): + self._game_selected_index = i + if self.activity.game.model.is_demo: + self._change_game() + else: + alert = Alert() + alert.props.title = _('Discard your modified game?') + icon = Icon(icon_name='dialog-ok') + alert.add_button(1, _('Discard'), icon) + icon = Icon(icon_name='dialog-cancel') + alert.add_button(0, _('Do not discard'), icon) + alert.connect('response', self._change_game_alert_cb) + self.activity.add_alert(alert) + + def _change_game_alert_cb(self, alert, response_id): + if alert is not None: + self.activity.remove_alert(alert) + if response_id == 1: + self._change_game() + + def _change_game(self): + title = self.translated_game_names[self._game_selected_index] 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_name = self.standard_game_names[self._game_selected_index] + + game_file = join(dirname(__file__), 'demos', game_name + '.zip') self.emit('game_changed', game_file, game_size, 'demo', title, None) - self._game_combo.combo.set_active(0) - + 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) |