Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/activity.py
blob: cbc702538a0ec5f05da904a7ee1984412937e94e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# -*- coding: utf-8 -*-

import logging
import sugargame.canvas
from sugargame import mesh
import pygame
from gi.repository import Gtk

from sugar3.activity import activity
from sugar3.activity.widgets import ActivityToolbarButton
from sugar3.activity.widgets import StopButton
from sugar3.graphics.toolbarbox import ToolbarBox
from sugar3.graphics.toolbutton import ToolButton
from gettext import gettext as _

import game


class MazeActivity(activity.Activity):
    def __init__(self, handle):
        super(MazeActivity, self).__init__(handle)
        self.build_toolbar()

        # Build the Pygame canvas.
        self._pygamecanvas = sugargame.canvas.PygameCanvas(self)
        self.set_canvas(self._pygamecanvas)

        def shared_cb(*args, **kwargs):
            mesh.activity_shared(self)
            self._pygamecanvas.grab_focus()

        def joined_cb(*args, **kwargs):
            mesh.activity_joined(self)
            self._pygamecanvas.grab_focus()
        self.connect('shared', shared_cb)
        self.connect('joined', joined_cb)

        if self.get_shared():
            joined_cb()

        self.game = game.MazeGame(self._pygamecanvas)
        self._pygamecanvas.run_pygame(self.game.run)
        self._pygamecanvas.grab_focus()

    def get_preview(self):
        return self._pygamecanvas.get_preview()

    def build_toolbar(self):
        """Build our Activity toolbar for the Sugar system."""

        toolbar_box = ToolbarBox()
        activity_button = ActivityToolbarButton(self)
        toolbar_box.toolbar.insert(activity_button, 0)
        activity_button.show()

        separator = Gtk.SeparatorToolItem()
        toolbar_box.toolbar.insert(separator, -1)
        separator.show()

        easier_button = ToolButton('create-easier')
        easier_button.set_tooltip(_('Easier level'))
        easier_button.connect('clicked', self._easier_button_cb)
        toolbar_box.toolbar.insert(easier_button, -1)

        harder_button = ToolButton('create-harder')
        harder_button.set_tooltip(_('Harder level'))
        harder_button.connect('clicked', self._harder_button_cb)
        toolbar_box.toolbar.insert(harder_button, -1)

        separator = Gtk.SeparatorToolItem()
        separator.props.draw = False
        separator.set_size_request(0, -1)
        separator.set_expand(True)
        toolbar_box.toolbar.insert(separator, -1)
        separator.show()

        stop_button = StopButton(self)
        toolbar_box.toolbar.insert(stop_button, -1)
        stop_button.show()

        self.set_toolbar_box(toolbar_box)
        toolbar_box.show_all()

        self.connect("destroy", self.__stop_pygame)

        return toolbar_box

    def __stop_pygame(self, widget):
        pygame.quit()

    def _easier_button_cb(self, button):
        pygame.event.post(pygame.event.Event(pygame.USEREVENT,
                                    action='easier_button'))

    def _harder_button_cb(self, button):
        pygame.event.post(pygame.event.Event(pygame.USEREVENT,
                                    action='harder_button'))