diff options
author | Walter Bender <walter.bender@gmail.com> | 2012-07-27 14:30:02 (GMT) |
---|---|---|
committer | Walter Bender <walter.bender@gmail.com> | 2012-07-27 14:30:02 (GMT) |
commit | 87e3dde4fb44b872cf3f7077491b616abdcedb7a (patch) | |
tree | ef9470c0d9f279c7b986fa13cbf852c3fa87ffe7 /GNUChessActivity.py | |
parent | d5a5d69ee61b704a6abd88cc2c802227fe30d52a (diff) |
support for old-style Sugar
Diffstat (limited to 'GNUChessActivity.py')
-rw-r--r-- | GNUChessActivity.py | 170 |
1 files changed, 120 insertions, 50 deletions
diff --git a/GNUChessActivity.py b/GNUChessActivity.py index 073b7eb..3f2ec43 100644 --- a/GNUChessActivity.py +++ b/GNUChessActivity.py @@ -15,10 +15,15 @@ import gobject from sugar.activity import activity from sugar import profile -from sugar.graphics.toolbarbox import ToolbarBox -from sugar.activity.widgets import ActivityToolbarButton -from sugar.activity.widgets import StopButton -from sugar.graphics.toolbarbox import ToolbarButton +try: + from sugar.graphics.toolbarbox import ToolbarBox + _have_toolbox = True +except ImportError: + _have_toolbox = False +if _have_toolbox: + from sugar.activity.widgets import ActivityToolbarButton + from sugar.activity.widgets import StopButton + from sugar.graphics.toolbarbox import ToolbarButton from sugar.graphics.objectchooser import ObjectChooser from sugar.datastore import datastore from sugar import mime @@ -72,6 +77,7 @@ class GNUChessActivity(activity.Activity): self.colors = profile.get_color().to_string().split(',') else: self.colors = ['#A0FFA0', '#FF8080'] + self.buddy = None self.hardware = get_hardware() self._setup_toolbars() @@ -85,7 +91,8 @@ class GNUChessActivity(activity.Activity): canvas.show() self.show_all() - if hasattr(self.get_window(), 'get_cursor'): + if hasattr(self, 'get_window') and \ + hasattr(self.get_window(), 'get_cursor'): self.old_cursor = self.get_window().get_cursor() else: self.old_cursor = None @@ -104,6 +111,8 @@ class GNUChessActivity(activity.Activity): def restore_cursor(self): ''' No longer thinking, so restore standard cursor. ''' + if not hasattr(self, 'get_window'): + return if hasattr(self.get_window(), 'get_cursor'): self.get_window().set_cursor(self.old_cursor) else: @@ -111,6 +120,8 @@ class GNUChessActivity(activity.Activity): def set_thinking_cursor(self): ''' Thinking, so set watch cursor. ''' + if not hasattr(self, 'get_window'): + return if hasattr(self.get_window(), 'get_cursor'): self.old_cursor = self.get_window().get_cursor() self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) @@ -124,45 +135,61 @@ class GNUChessActivity(activity.Activity): self.view_toolbar = gtk.Toolbar() self.adjust_toolbar = gtk.Toolbar() self.custom_toolbar = gtk.Toolbar() - toolbox = ToolbarBox() - - activity_button = ActivityToolbarButton(self) - toolbox.toolbar.insert(activity_button, 0) - activity_button.show() - - edit_toolbar_button = ToolbarButton(label=_("Edit"), - page=self.edit_toolbar, - icon_name='toolbar-edit') - self.edit_toolbar.show() - toolbox.toolbar.insert(edit_toolbar_button, -1) - edit_toolbar_button.show() - - view_toolbar_button = ToolbarButton(label=_("View"), - page=self.view_toolbar, - icon_name='toolbar-view') - self.view_toolbar.show() - toolbox.toolbar.insert(view_toolbar_button, -1) - view_toolbar_button.show() + + if _have_toolbox: + toolbox = ToolbarBox() + + activity_button = ActivityToolbarButton(self) + toolbox.toolbar.insert(activity_button, 0) + activity_button.show() + + edit_toolbar_button = ToolbarButton(label=_("Edit"), + page=self.edit_toolbar, + icon_name='toolbar-edit') + self.edit_toolbar.show() + toolbox.toolbar.insert(edit_toolbar_button, -1) + edit_toolbar_button.show() + + view_toolbar_button = ToolbarButton(label=_("View"), + page=self.view_toolbar, + icon_name='toolbar-view') + self.view_toolbar.show() + toolbox.toolbar.insert(view_toolbar_button, -1) + view_toolbar_button.show() - adjust_toolbar_button = ToolbarButton(label=_('Adjust'), - page=self.adjust_toolbar, - icon_name='preferences-system') - self.adjust_toolbar.show() - toolbox.toolbar.insert(adjust_toolbar_button, -1) - adjust_toolbar_button.show() - - custom_toolbar_button = ToolbarButton(label=_("Custom"), - page=self.custom_toolbar, - icon_name='view-source') - self.custom_toolbar.show() - toolbox.toolbar.insert(custom_toolbar_button, -1) - custom_toolbar_button.show() - - self.set_toolbar_box(toolbox) - toolbox.show() - self.toolbar = toolbox.toolbar - - adjust_toolbar_button.set_expanded(True) + adjust_toolbar_button = ToolbarButton(label=_('Adjust'), + page=self.adjust_toolbar, + icon_name=\ + 'preferences-system') + self.adjust_toolbar.show() + toolbox.toolbar.insert(adjust_toolbar_button, -1) + adjust_toolbar_button.show() + + custom_toolbar_button = ToolbarButton(label=_("Custom"), + page=self.custom_toolbar, + icon_name='view-source') + self.custom_toolbar.show() + toolbox.toolbar.insert(custom_toolbar_button, -1) + custom_toolbar_button.show() + + self.set_toolbar_box(toolbox) + toolbox.show() + self.toolbar = toolbox.toolbar + + adjust_toolbar_button.set_expanded(True) + + else: + # Use pre-0.86 toolbar design + games_toolbar = gtk.Toolbar() + toolbox = activity.ActivityToolbox(self) + self.set_toolbox(toolbox) + toolbox.add_toolbar(_('Play'), self.adjust_toolbar) + toolbox.add_toolbar(_('Edit'), self.edit_toolbar) + toolbox.add_toolbar(_('View'), self.view_toolbar) + toolbox.add_toolbar(_('Custom'), self.custom_toolbar) + toolbox.show() + toolbox.set_current_toolbar(1) + self.toolbar = self.adjust_toolbar button_factory('edit-copy', self.edit_toolbar, @@ -274,11 +301,12 @@ class GNUChessActivity(activity.Activity): self.status = label_factory(self.toolbar, '') self.status.set_label(_("It is White's move.")) - separator_factory(toolbox.toolbar, True, False) - stop_button = StopButton(self) - stop_button.props.accelerator = '<Ctrl>q' - toolbox.toolbar.insert(stop_button, -1) - stop_button.show() + if _have_toolbox: + separator_factory(toolbox.toolbar, True, False) + stop_button = StopButton(self) + stop_button.props.accelerator = '<Ctrl>q' + toolbox.toolbar.insert(stop_button, -1) + stop_button.show() button_factory('white-pawn', self.custom_toolbar, @@ -367,7 +395,7 @@ class GNUChessActivity(activity.Activity): return def _show_history_cb(self, button): - self._gnuchess.show_game_history() + self._gnuchess.show_game_history(self.tag_pairs()) if self.showing_game_history: self.history_button.set_icon('checkerboard') self.history_button.set_tooltip(_('Show game board')) @@ -378,7 +406,7 @@ class GNUChessActivity(activity.Activity): def _copy_cb(self, *args): clipboard = gtk.Clipboard() - clipboard.set_text(self._gnuchess.copy_game()) + clipboard.set_text(self.tag_pairs + self._gnuchess.copy_game()) def _paste_cb(self, *args): ''' Pasting ''' @@ -469,9 +497,38 @@ class GNUChessActivity(activity.Activity): ''' Start a new gnuchess. ''' self._new_game_alert('new') + def tag_pairs(self): + ''' Tag paris must be ascii ''' + if type(self.nick) == unicode: + nick = self.nick.encode('ascii', 'replace') + else: + nick = self.nick + if self.buddy is not None and type(self.buddy) == unicode: + buddy = self.buddy.encode('ascii', 'replace') + else: + buddy = self.buddy + if self.playing_white: + white = nick + if self.playing_robot: + black = 'gnuchess (%s)' % (self.playing_mode) + elif self._gnuchess.we_are_sharing and buddy is not None: + black = buddy + else: + black = '?' + else: + black = nick + if self.playing_robot: + white = 'gnuchess (%s)' % (self.playing_mode) + elif self._gnuchess.we_are_sharing and buddy is not None: + white = buddy + else: + white = '?' + return '[White "%s"]\n[Black "%s"]\n\n' % (white, black) + def write_file(self, file_path): ''' Write the grid status to the Journal ''' fd = open(file_path, 'w') + fd.write(self.tag_pairs()) fd.write(self._gnuchess.copy_game()) fd.close() # self.metadata['saved_game'] = json_dump(self._gnuchess.save_game()) @@ -704,6 +761,7 @@ params=%r state=%d' % (id, initiator, type, service, params, state)) 'n': [self._receive_new_game, 'start a new game'], 'm': [self._receive_move, 'make a move'], 'r': [self._receive_restore, 'restore game state'], + 'N': [self._receive_nick, 'receive nick from opponent'], } def event_received_cb(self, event_message): @@ -723,6 +781,7 @@ params=%r state=%d' % (id, initiator, type, service, params, state)) ''' Send a new game to joiner. ''' if not self.initiating: return + self.send_nick() if self.playing_white: _logger.debug('send_new_game: B') self.send_event('n|B') @@ -737,6 +796,14 @@ params=%r state=%d' % (id, initiator, type, service, params, state)) _logger.debug('send_restore') self.send_event('r|%s' % (self._gnuchess.copy_game())) + def send_nick(self): + _logger.debug('send_nick') + self.send_event('r|%s' % (self.nick)) + + def _receive_nick(self, payload): + _logger.debug('received_nick %s' % (payload)) + self.buddy = payload + def _receive_restore(self, payload): ''' Get game state from sharer. ''' _logger.debug('received_restore %s' % (payload)) @@ -750,6 +817,9 @@ params=%r state=%d' % (id, initiator, type, service, params, state)) def _receive_new_game(self, payload): ''' Sharer can start a new gnuchess. ''' _logger.debug('received_new_game %s' % (payload)) + if self.initializing: + return + self.send_nick() if payload == 'W': if not self.playing_white: self.restoring = True |