From 18f75d3a8c8fbc42bff3638f544ad61edfc15f92 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Mon, 14 Mar 2011 12:43:32 +0000 Subject: more robust switching between turtles on select; don't save remote turtles --- diff --git a/TurtleArt/tacollaboration.py b/TurtleArt/tacollaboration.py index 4955777..51ba471 100644 --- a/TurtleArt/tacollaboration.py +++ b/TurtleArt/tacollaboration.py @@ -98,7 +98,8 @@ class Collaboration(): self.initiating = True self.waiting_for_turtles = False self._tw.turtle_dictionary = self._get_dictionary() - + self._tw.remote_turtles = [] + debug_output('I am sharing...', self._tw.running_sugar) self.conn = self._shared_activity.telepathy_conn @@ -216,6 +217,10 @@ class Collaboration(): self._tw.turtle_dictionary[nick] = colors else: self._tw.turtle_dictionary = {nick: colors} + if hasattr(self._tw, 'remote_turtles'): + self._tw.remote_turtles.append(nick) + else: + self._tw.remote_turtles = [nick] # Add new turtle for the joiner. self._tw.canvas.set_turtle(nick, colors) self._tw.label_remote_turtle(nick) @@ -229,7 +234,8 @@ class Collaboration(): if len(payload) > 0: self._tw.turtle_dictionary = data_from_string(payload) for nick in self._tw.turtle_dictionary: - if nick != self._tw.nick: + if nick != self._tw.nick and \ + nick in self._tw.remote_turtles: colors = self._tw.turtle_dictionary[nick] # add new turtle for the joiner self._tw.canvas.set_turtle(nick, colors) diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py index 669d93e..bdea860 100644 --- a/TurtleArt/tawindow.py +++ b/TurtleArt/tawindow.py @@ -1308,8 +1308,8 @@ class TurtleArtWindow(): def _turtle_pressed(self, x, y): (tx, ty) = self.selected_turtle.get_xy() - w = self.active_turtle.spr.rect.width / 2 - h = self.active_turtle.spr.rect.height / 2 + w = self.selected_turtle.spr.rect.width / 2 + h = self.selected_turtle.spr.rect.height / 2 dx = x - tx - w dy = y - ty - h # if x, y is near the edge, rotate @@ -1335,9 +1335,10 @@ class TurtleArtWindow(): if self.selected_turtle is not None: dtype, dragx, dragy = self.drag_turtle (sx, sy) = self.selected_turtle.get_xy() + # self.canvas.set_turtle(self.selected_turtle.get_name()) if dtype == 'move': - dx = x - dragx - sx + self.active_turtle.spr.rect.width / 2 - dy = y - dragy - sy + self.active_turtle.spr.rect.width / 2 + dx = x - dragx - sx + self.selected_turtle.spr.rect.width / 2 + dy = y - dragy - sy + self.selected_turtle.spr.rect.width / 2 self.selected_turtle.spr.set_layer(TOP_LAYER) tx, ty = self.canvas.screen_to_turtle_coordinates(sx + dx, sy + dy) @@ -1348,8 +1349,8 @@ class TurtleArtWindow(): else: self.canvas.setxy(tx, ty) else: - dx = x - sx - self.active_turtle.spr.rect.width / 2 - dy = y - sy - self.active_turtle.spr.rect.height / 2 + dx = x - sx - self.selected_turtle.spr.rect.width / 2 + dy = y - sy - self.selected_turtle.spr.rect.height / 2 self.canvas.seth(int(dragx + atan2(dy, dx) / DEGTOR + 5) / \ 10 * 10) self.lc.update_label_value('heading', self.canvas.heading) @@ -1511,14 +1512,15 @@ class TurtleArtWindow(): else: self.selected_turtle.hide() self.turtles.remove_from_dict(k) + self.active_turtle = None else: self._move_turtle(tx - self.canvas.width / 2 + \ self.active_turtle.spr.rect.width / 2, self.canvas.height / 2 - ty - \ self.active_turtle.spr.rect.height / 2) self.selected_turtle = None - self.active_turtle = self.turtles.get_turtle( - self.default_turtle_name) + if self.active_turtle is None: + self.canvas.set_turtle(self.default_turtle_name) return # If we don't have a group of blocks, then there is nothing to do. @@ -1558,8 +1560,8 @@ class TurtleArtWindow(): ''' Is this a remote turtle? ''' if name == self.nick: return False - if hasattr(self, 'turtle_dictionary') and \ - name in self.turtle_dictionary: + if hasattr(self, 'remote_turtles') and \ + name in self.remote_turtles: return True return False @@ -2673,11 +2675,12 @@ class TurtleArtWindow(): _sy - self.canvas.cy, connections)) if save_turtle: for _turtle in iter(self.turtles.dict): - self.canvas.set_turtle(_turtle) - _data.append((-1, ['turtle', _turtle], - self.canvas.xcor, self.canvas.ycor, - self.canvas.heading, self.canvas.color, - self.canvas.shade, self.canvas.pensize)) + # Don't save remote turtles + if not self.remote_turtle(_turtle): + _data.append((-1, ['turtle', _turtle], + self.canvas.xcor, self.canvas.ycor, + self.canvas.heading, self.canvas.color, + self.canvas.shade, self.canvas.pensize)) return _data def display_coordinates(self): -- cgit v0.9.1