Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tawindow.py
diff options
context:
space:
mode:
authorWalter Bender <walter@walter-laptop.(none)>2010-01-28 02:33:42 (GMT)
committer Walter Bender <walter@walter-laptop.(none)>2010-01-28 02:33:42 (GMT)
commitb3dc9eee00bf73681b24b0652c795dae13339a11 (patch)
tree3301a73dc342b1ecdc111cc67fd6f608e035cae3 /tawindow.py
parentda1a213d4a5333729123f0f864bf72bbe5d280fd (diff)
fixed most of the selection bugs
Diffstat (limited to 'tawindow.py')
-rw-r--r--tawindow.py50
1 files changed, 29 insertions, 21 deletions
diff --git a/tawindow.py b/tawindow.py
index 511a3e0..d68147e 100644
--- a/tawindow.py
+++ b/tawindow.py
@@ -138,10 +138,12 @@ class TurtleArtWindow():
self.selected_blk = None
self.selected_spr = None
self.drag_group = None
+ self.drag_turtle = 'move', 0, 0
+ self.drag_pos = 0, 0
self.block_list = Blocks(self.scale)
self.sprite_list = Sprites(self.window, self.area, self.gc)
self.turtle_list = Turtles(self.sprite_list)
- self.turtle = Turtle(self.turtle_list)
+ self.active_turtle = Turtle(self.turtle_list)
self.selected_turtle = None
self.canvas = TurtleGraphics(self, self.width, self.height)
@@ -293,7 +295,7 @@ class TurtleArtWindow():
for i, name in enumerate(STATUS_SHAPES):
self.status_shapes[name] = self._load_sprite_from_file(
"%s/%s.svg" % (self.path, name))
- self.status_spr = Sprite(self.sprite_list, self.height-75, 0,
+ self.status_spr = Sprite(self.sprite_list, 0, self.height-150,
self.status_shapes['status'])
self.status_spr.set_layer(HIDE_LAYER)
self.status_spr.type = 'status'
@@ -317,6 +319,8 @@ class TurtleArtWindow():
for i in range(len(PALETTES[self.selected_palette])):
self.palettes[self.selected_palette][i].spr.set_layer(
HIDE_LAYER)
+ self.selectors[self.selected_palette].set_shape(
+ self.selector_shapes[self.selected_palette][0])
for i in range(len(PALETTES)):
self.selectors[i].set_layer(HIDE_LAYER)
if self.palette_sprs[i] is not None:
@@ -467,14 +471,14 @@ class TurtleArtWindow():
self.block_operation = 'move'
# First, check to see if we are dragging or rotating a turtle.
if self.selected_turtle is not None:
- type, dragx, dragy = self.dragpos
- (sx, sy) = self.selected_turtle.spr.get_xy()
- if type == 'move':
+ dtype, dragx, dragy = self.drag_turtle
+ (sx, sy) = self.selected_turtle.get_xy()
+ if dtype == 'move':
if mdx != 0 or mdy != 0:
dx, dy = mdx, mdy
else:
dx, dy = x-dragx-sx, y-dragy-sy
- self.selected_turtle.spr.move((sx+dx, sy+dy))
+ self.selected_turtle.move((sx+dx, sy+dy))
else:
if mdx != 0 or mdy != 0:
dx, dy = mdx, mdy
@@ -489,7 +493,7 @@ class TurtleArtWindow():
elif self.drag_group[0] is not None:
blk = self.drag_group[0]
self.selected_spr = blk.spr
- dragx, dragy = self.dragpos
+ dragx, dragy = self.drag_pos
if mdx != 0 or mdy != 0:
dx, dy = mdx, mdy
else:
@@ -746,10 +750,12 @@ class TurtleArtWindow():
if spr is None:
return True
self.selected_spr = spr
-
+ if hasattr(spr,'type'):
+ print "clicked on %s" % (spr.type)
# From the sprite at x, y, look for a corresponding block
blk = self.block_list.spr_to_block(spr)
if blk is not None:
+ print "clicked on %s (type %s)" % (blk.name, blk.type)
if blk.type == 'block':
self.selected_blk = blk
self._block_pressed(mask, x, y, blk)
@@ -763,9 +769,10 @@ class TurtleArtWindow():
return True
# Next, look for a turtle
- tur = self.turtle_list.spr_to_turtle(spr)
- if tur is not None:
- self.selected_turtle = tur
+ t = self.turtle_list.spr_to_turtle(spr)
+ if t is not None:
+ print "clicked on turtle %d" % (self.turtle_list.list.index(t))
+ self.selected_turtle = t
self._turtle_pressed(x, y)
return True
@@ -786,7 +793,7 @@ class TurtleArtWindow():
self._disconnect(blk)
self.drag_group = self._find_group(blk)
(sx, sy) = blk.spr.get_xy()
- self.dragpos = x-sx, y-sy
+ self.drag_pos = x-sx, y-sy
for blk in self.drag_group:
blk.spr.set_layer(TOP_LAYER)
@@ -835,13 +842,13 @@ class TurtleArtWindow():
self.dy = 0
if verbose:
print "processing remote button release: %d, %d" % (x, y)
+
# We may have been moving the turtle
if self.selected_turtle is not None:
- (tx, ty) = self.canvas.spr.get_xy()
- self.canvas.xcor = tx-self.canvas.cx- \
- self.canvas.canvas._width/2+30
- self.canvas.ycor = self.canvas.canvas._height/2-ty+ \
- self.canvas.cy-30
+ (tx, ty) = self.selected_turtle.get_xy()
+ (cx, cy) = self.canvas.canvas.get_xy()
+ self.canvas.xcor = tx-self.canvas.canvas._width/2+30-cx
+ self.canvas.ycor = self.canvas.canvas._height/2-ty-30+cy
self.canvas.move_turtle()
if self.running_sugar():
display_coordinates(self)
@@ -1013,7 +1020,7 @@ class TurtleArtWindow():
x-20, y-20, 'block', [])
newspr = newblk.spr
newspr.set_layer(TOP_LAYER)
- self.dragpos = 20, 20
+ self.drag_pos = 20, 20
newblk.connections = [None]*len(newblk.docks)
for i, argvalue in enumerate(newblk.defaults):
# skip the first dock position--it is always a connector
@@ -1074,12 +1081,13 @@ class TurtleArtWindow():
Turtle pressed
"""
def _turtle_pressed(self, x, y):
- (tx, ty) = self.canvas.spr.get_xy()
+ (tx, ty) = self.selected_turtle.get_xy()
dx, dy = x-tx-30, y-ty-30
if dx*dx+dy*dy > 200:
- self.dragpos = ('turn', self.canvas.heading-atan2(dy,dx)/DEGTOR, 0)
+ self.drag_turtle = ('turn',
+ self.canvas.heading-atan2(dy,dx)/DEGTOR, 0)
else:
- self.dragpos = ('move', x-tx, y-ty)
+ self.drag_turtle = ('move', x-tx, y-ty)
"""
Replace Journal block graphic with preview image