diff options
Diffstat (limited to 'memorizetoolbar.py')
-rw-r--r-- | memorizetoolbar.py | 86 |
1 files changed, 67 insertions, 19 deletions
diff --git a/memorizetoolbar.py b/memorizetoolbar.py index 98ddf0f..0c9df06 100644 --- a/memorizetoolbar.py +++ b/memorizetoolbar.py @@ -29,6 +29,12 @@ from sugar.graphics.menuitem import MenuItem import logging from gobject import SIGNAL_RUN_FIRST, TYPE_PYOBJECT +#ARIEL +import gtk +from sugar.activity.activity import get_bundle_path +import os +import datetime + _logger = logging.getLogger('memorize-activity') @@ -46,7 +52,9 @@ class MemorizeToolbarBuilder(gobject.GObject): ] __gsignals__ = { - 'game_changed': (SIGNAL_RUN_FIRST, None, 5 * [TYPE_PYOBJECT]) + 'game_changed': (SIGNAL_RUN_FIRST, None, 5 * [TYPE_PYOBJECT]), + 'game_saved': (SIGNAL_RUN_FIRST, None, (gobject.TYPE_STRING,)), + 'game_selected': (SIGNAL_RUN_FIRST, None, (gobject.TYPE_STRING,)) } def __init__(self, activity): @@ -55,53 +63,93 @@ class MemorizeToolbarBuilder(gobject.GObject): self.toolbar = self.activity.get_toolbar_box().toolbar self.jobject = None - # Change size combobox - self._size_combo = ToolComboBox() - self._sizes = ['4 X 4', '5 X 5', '6 X 6'] - for i, f in enumerate(self._sizes): - self._size_combo.combo.append_item(i, f) - self.size_handle_id = self._size_combo.combo.connect( \ - 'changed', self._game_size_cb) - self.toolbar.insert(self._size_combo, -1) - self._size_combo.combo.set_active(0) - # Change demo games button self._demo_games = RadioMenuButton(icon_name='memorize-collection') - self._demo_games.props.tooltip = _('Load demo games') + #ARIEL self._demo_games.props.tooltip = _('Load demo games') + self._demo_games.props.tooltip = _('Load/Save 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() + + #ARIEL list saved games + datadir = get_bundle_path() + "/data" + for filename in os.listdir(datadir): + if not filename.endswith(".json"): + continue + + menu_item = MenuItem(filename) + menu_item.connect('activate', self.__activate_saved_game_cb, filename) + self._demo_games.props.palette.menu.append(menu_item) + menu_item.show() + + + #ARIEL Add Save game menu item + separator = gtk.SeparatorMenuItem() + self._demo_games.props.palette.menu.append(separator) + separator.show() + menu_item = MenuItem("Save current") + menu_item.connect('activate', self.__save_game_cb, i+1) + self._demo_games.props.palette.menu.append(menu_item) + menu_item.show() + self.toolbar.insert(self._demo_games, -1) + # Change size combobox + self._size_combo = ToolComboBox() + self._sizes = ['4 X 4', '5 X 5', '6 X 6'] + for i, f in enumerate(self._sizes): + self._size_combo.combo.append_item(i, f) + self.size_handle_id = self._size_combo.combo.connect( \ + 'changed', self._game_size_cb) + self.toolbar.insert(self._size_combo, -1) + self._size_combo.combo.set_active(0) + # 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 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) + self._restart_button.set_sensitive(active) 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 __save_game_cb(self, menu, i): + """ARIEL Save current game + """ + # Create data dir if not exists + datadir = get_bundle_path() + "/data" + if not os.path.exists(datadir): + os.mkdir(datadir) + + # Build file name based on datetime + filename = "memorize_" + datetime.datetime.now().strftime("%Y%m%d%H%M%S") + ".json" + filepath = datadir + "/" + filename + + # Get game matrix + self.emit('game_saved',filepath) + + #~ # Write the file + #~ f = open ( filepath, "w" ) + #~ f.close() + + #ARIEL click in the menu item handler + def __activate_saved_game_cb(self, menu, filename): + self.emit('game_selected',filename) + def __activate_game_cb(self, menu, i): self._game_selected_index = i if self.activity.game.model.is_demo: |