diff options
Diffstat (limited to 'Making_Activities_Using_PyGame_gtk3/DemoiselleActivity.py')
-rw-r--r-- | Making_Activities_Using_PyGame_gtk3/DemoiselleActivity.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/Making_Activities_Using_PyGame_gtk3/DemoiselleActivity.py b/Making_Activities_Using_PyGame_gtk3/DemoiselleActivity.py new file mode 100644 index 0000000..2c6c99f --- /dev/null +++ b/Making_Activities_Using_PyGame_gtk3/DemoiselleActivity.py @@ -0,0 +1,103 @@ +# DemoiselleActivity.py + +# Copyright (C) 2010 James D. Simmons +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +from gettext import gettext as _ + +import gtk +import pygame +from sugar.activity import activity +from sugar.graphics.toolbutton import ToolButton +import gobject +import sugargame.canvas +import demoiselle2 + +class DemoiselleActivity(activity.Activity): + def __init__(self, handle): + super(DemoiselleActivity, self).__init__(handle) + + # Build the activity toolbar. + self.build_toolbar() + + # Create the game instance. + self.game = demoiselle2.Demoiselle() + + # Build the Pygame canvas. + self._pygamecanvas = sugargame.canvas.PygameCanvas(self) + # Note that set_canvas implicitly calls read_file when resuming from the Journal. + self.set_canvas(self._pygamecanvas) + self.score = '' + + # Start the game running. + self._pygamecanvas.run_pygame(self.game.run) + + def build_toolbar(self): + toolbox = activity.ActivityToolbox(self) + activity_toolbar = toolbox.get_activity_toolbar() + activity_toolbar.keep.props.visible = False + activity_toolbar.share.props.visible = False + + self.view_toolbar = ViewToolbar() + toolbox.add_toolbar(_('View'), self.view_toolbar) + self.view_toolbar.connect('go-fullscreen', + self.view_toolbar_go_fullscreen_cb) + self.view_toolbar.show() + + toolbox.show() + self.set_toolbox(toolbox) + + def view_toolbar_go_fullscreen_cb(self, view_toolbar): + self.fullscreen() + + def read_file(self, file_path): + score_file = open(file_path, "r") + while score_file: + self.score = score_file.readline() + self.game.set_score(int(self.score)) + score_file.close() + + def write_file(self, file_path): + score = self.game.get_score() + f = open(file_path, 'wb') + try: + f.write(str(score)) + finally: + f.close + +class ViewToolbar(gtk.Toolbar): + __gtype_name__ = 'ViewToolbar' + + __gsignals__ = { + 'needs-update-size': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])), + 'go-fullscreen': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])) + } + + def __init__(self): + gtk.Toolbar.__init__(self) + self.fullscreen = ToolButton('view-fullscreen') + self.fullscreen.set_tooltip(_('Fullscreen')) + self.fullscreen.connect('clicked', self.fullscreen_cb) + self.insert(self.fullscreen, -1) + self.fullscreen.show() + + def fullscreen_cb(self, button): + self.emit('go-fullscreen') |