Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activity.py28
-rw-r--r--[-rwxr-xr-x]game.py29
-rw-r--r--[-rwxr-xr-x]setup.py0
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. """
diff --git a/game.py b/game.py
index d7da995..ed00cd6 100755..100644
--- a/game.py
+++ b/game.py
@@ -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:
diff --git a/setup.py b/setup.py
index 530f97c..530f97c 100755..100644
--- a/setup.py
+++ b/setup.py