diff options
-rw-r--r-- | activity.py | 28 | ||||
-rw-r--r--[-rwxr-xr-x] | game.py | 29 | ||||
-rw-r--r--[-rwxr-xr-x] | setup.py | 0 |
3 files changed, 38 insertions, 19 deletions
diff --git a/activity.py b/activity.py index 5fbe225..d543b69 100644 --- a/activity.py +++ b/activity.py @@ -50,8 +50,10 @@ class Activity(activity.Activity): activity.Activity.__init__(self, handle, True) # Canvas - canvas = game.Canvas() - self.set_canvas(canvas) + self.game = game.Canvas() + self.game.connect('cross-added', self.send_new_cross) + self.game.connect('circle-added', self.send_new_circle) + self.set_canvas(self.game) # Toolbar toolbarbox = ToolbarBox() @@ -72,7 +74,7 @@ class Activity(activity.Activity): # ToolButtons new_game_btn = ToolButton() - new_game_btn.connect('clicked', lambda w: canvas.clear()) + new_game_btn.connect('clicked', lambda w: self.game.clear()) new_game_btn.set_tooltip(_('New Game')) new_game_btn.props.icon_name = 'new-game' toolbarbox.toolbar.insert(new_game_btn, -1) @@ -83,21 +85,21 @@ class Activity(activity.Activity): toolbarbox.toolbar.insert(separator, -1) cross_btn = RadioToolButton() - cross_btn.connect('clicked', lambda w: canvas.set_mode( + cross_btn.connect('clicked', lambda w: self.game.set_mode( game.MODE_CROSS)) cross_btn.set_tooltip(_('Cross')) cross_btn.props.icon_name = 'cross' toolbarbox.toolbar.insert(cross_btn, -1) circle_btn = RadioToolButton() - circle_btn.connect('clicked', lambda w: canvas.set_mode( + circle_btn.connect('clicked', lambda w: self.game.set_mode( game.MODE_CIRCLE)) circle_btn.set_tooltip(_('Circle')) circle_btn.props.icon_name = 'circle' circle_btn.props.group = cross_btn toolbarbox.toolbar.insert(circle_btn, -1) - canvas.set_mode(game.MODE_CROSS) + self.game.set_mode(game.MODE_CROSS) separator = Gtk.SeparatorToolItem() toolbarbox.toolbar.insert(separator, -1) @@ -134,6 +136,8 @@ class Activity(activity.Activity): self._share = "" self.connect('shared', self._shared_cb) self.connect('joined', self._joined_cb) + + self._setup_dispatch_table() def _shared_cb(self, activity): """Either set up initial share...""" @@ -199,8 +203,8 @@ params=%r state=%d' % (id, initiator, type, service, params, state)) def _setup_dispatch_table(self): """Associate tokens with commands.""" self._processing_methods = { - 'x': [self._receive_cross, 'get a cross'], - 'o': [self._receive_circle, 'get a circle'], + 'x': [self._receive_new_cross, 'get a cross'], + 'o': [self._receive_new_circle, 'get a circle'], } def event_received_cb(self, event_message): @@ -214,19 +218,19 @@ params=%r state=%d' % (id, initiator, type, service, params, state)) return self._processing_methods[command][0](payload) - def send_new_cross(self, square): + def send_new_cross(self, widget, square): self.send_event('x|%s' % square) - def send_new_circle(self, square): + def send_new_circle(self, widget, square): self.send_event('o|%s' % square) def _receive_new_cross(self, square): square = int(square) - _logger.debug('Receive a new cross %s' % square) + self.game.add_cross(square, emit_signal=False) def _receive_new_circle(self, square): square = int(square) - _logger.debug('Receive a new circle %s' % square) + self.game.add_circle(square, emit_signal=False) def send_event(self, entry): """ Send event through the tube. """ @@ -38,6 +38,10 @@ BACKGROUND_COLOR = (0.352941, 0.349019, 0.709803) class Canvas(Gtk.DrawingArea): + __gsignals__ = {'cross-added': (GObject.SignalFlags.RUN_FIRST, None, [int]), + 'circle-added': (GObject.SignalFlags.RUN_FIRST, + None, [int])} + def __init__(self): GObject.GObject.__init__(self) @@ -157,16 +161,27 @@ class Canvas(Gtk.DrawingArea): self.cursor = self.get_pos(event.x, event.y) self.queue_draw() - def _click_cb(self, widget, event): - pos = self.get_pos(event.x, event.y) + def add_cross(self, square, emit_signal=True): + self.crosses.append( + square if type(square) == tuple else self.squares[square]) + if emit_signal: + self.emit('cross-added', self.squares.index(square)) + self.queue_draw() - if self._mode == MODE_CIRCLE and pos: - self.circles.append(pos) + def add_circle(self, square, emit_signal=True): + self.circles.append( + square if type(square) == tuple else self.squares[square]) + if emit_signal: + self.emit('circle-added', self.squares.index(square)) + self.queue_draw() - elif self._mode == MODE_CROSS and pos: - self.crosses.append(pos) + def _click_cb(self, widget, event): + pos = self.get_pos(event.x, event.y) - self.queue_draw() + if self._mode == MODE_CROSS and pos: + self.add_cross(pos) + elif self._mode == MODE_CIRCLE and pos: + self.add_circle(pos) def get_pos(self, mx, my): try: |