from gettext import gettext as _ import gtk from sugar.activity import activity from sugar.graphics.radiotoolbutton import RadioToolButton from sugar.graphics.toolbutton import ToolButton import sugargame.activity import physics import tools class PhysicsActivity(activity.Activity): def __init__(self, handle): super(PhysicsActivity, self).__init__(handle) self.metadata['mime_type'] = 'application/x-physics-activity' self.game = physics.PhysicsGame() self.build_toolbar() self.build_canvas() self.canvas.run_pygame(self.run) def run(self): self.game.run() def build_canvas(self): self._canvas = sugargame.canvas.PygameCanvas(self) self.set_canvas(self._canvas) def build_toolbar(self): # make a toolbox toolbox = activity.ActivityToolbox(self) # modify the Activity tab activity_toolbar = toolbox.get_activity_toolbar() activity_toolbar.share.props.visible = False self.blocklist = [] # make a 'create' toolbar create_toolbar = gtk.Toolbar() # stop/play button self.stop_play_state = True self.stop_play = ToolButton('media-playback-stop') self.stop_play.set_tooltip(_("Stop")) self.stop_play.set_accelerator(_('space')) self.stop_play.connect('clicked', self.stop_play_cb) create_toolbar.insert(self.stop_play, 0) self.stop_play.show() separator = gtk.SeparatorToolItem() create_toolbar.insert(separator, 1) separator.show() # make + add the component buttons self.radioList = {} firstButton = None for c in tools.allTools: button = RadioToolButton(named_icon=c.icon) if firstButton: button.set_group(firstButton) else: button.set_group(None) firstButton = button button.set_tooltip(c.toolTip) button.set_accelerator(c.toolAccelerator) button.connect('clicked',self.radio_clicked_cb) create_toolbar.insert(button,-1) button.show() self.radioList[button] = c.name # add the toolbars to the toolbox toolbox.add_toolbar(_("Create"), create_toolbar) create_toolbar.show() toolbox.show() self.set_toolbox(toolbox) toolbox.set_current_toolbar(1) return activity_toolbar def stop_play_cb(self, button): self.game.stop_start_toggle() self.stop_play_state = not self.stop_play_state # Update button if self.stop_play_state: self.stop_play.set_icon('media-playback-stop') self.stop_play.set_tooltip(_("Stop")) else: self.stop_play.set_icon('media-playback-start') self.stop_play.set_tooltip(_("Start")) def radio_clicked_cb(self,button): self.game.set_tool(self.radioList[button]) def read_file(self, file_path): self.game.read_file(file_path) def write_file(self, file_path): self.game.write_file(file_path)