Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/memorizetoolbar.py
diff options
context:
space:
mode:
Diffstat (limited to 'memorizetoolbar.py')
-rw-r--r--memorizetoolbar.py193
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)