Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
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
parentda1a213d4a5333729123f0f864bf72bbe5d280fd (diff)
fixed most of the selection bugs
-rw-r--r--tacanvas.py31
-rw-r--r--talogo.py14
-rw-r--r--taturtle.py6
-rw-r--r--tawindow.py50
4 files changed, 55 insertions, 46 deletions
diff --git a/tacanvas.py b/tacanvas.py
index b10dc8c..3d03b6f 100644
--- a/tacanvas.py
+++ b/tacanvas.py
@@ -77,7 +77,7 @@ class TurtleGraphics:
self.canvas.type = 'canvas'
self.canvas.set_layer(CANVAS_LAYER)
self.gc = self.canvas.image.new_gc()
- self.tw.turtle.show()
+ self.tw.active_turtle.show()
self.shade = 0
self.clearscreen()
@@ -102,6 +102,7 @@ class TurtleGraphics:
self.move_turtle()
self.turn_turtle()
self.tw.turtle_list.show_all()
+ self.set_turtle(0)
def forward(self, n):
n *= self.tw.coord_scale
@@ -197,7 +198,7 @@ class TurtleGraphics:
self.pensize = ps
except:
pass
- self.tw.turtle.set_pen_size(ps)
+ self.tw.active_turtle.set_pen_size(ps)
self.gc.set_line_attributes(int(self.pensize*self.tw.coord_scale),
gtk.gdk.LINE_SOLID, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_MITER)
@@ -207,7 +208,7 @@ class TurtleGraphics:
self.tcolor = c
except:
pass
- self.tw.turtle.set_color(c)
+ self.tw.active_turtle.set_color(c)
self.set_fgcolor()
self.set_textcolor()
@@ -229,7 +230,7 @@ class TurtleGraphics:
self.shade = s
except:
pass
- self.tw.turtle.set_shade(s)
+ self.tw.active_turtle.set_shade(s)
self.set_fgcolor()
self.set_textcolor()
@@ -305,11 +306,11 @@ class TurtleGraphics:
h+self.pensize*self.tw.coord_scale+6)
def turn_turtle(self):
- self.tw.turtle.set_heading(self.heading)
+ self.tw.active_turtle.set_heading(self.heading)
def move_turtle(self):
x, y = self.width/2+int(self.xcor), self.height/2-int(self.ycor)
- self.tw.turtle.move((self.cx+x-30, self.cy+y-30))
+ self.tw.active_turtle.move((self.cx+x-30, self.cy+y-30))
self.invalt(x-30,y-30,60,60)
def invalt(self, x, y, w, h):
@@ -320,21 +321,21 @@ class TurtleGraphics:
# TODO: reskin active turtle
if i > self.tw.turtle_list.turtle_count()-1:
# if it is a new turtle, start it in the center of the screen
- self.tw.turtle = self.tw.turtle_list.get_turtle(i, True)
+ self.tw.active_turtle = self.tw.turtle_list.get_turtle(i, True)
self.xcor = 0
self.ycor = 0
self.heading = 0
self.move_turtle()
self.turn_turtle()
- self.tw.turtle.set_pen_state(True)
- self.tw.turtle = self.tw.turtle_list.get_turtle(i, True)
- tx, ty = self.tw.turtle.get_xy()
+ self.tw.active_turtle.set_pen_state(True)
+ self.tw.active_turtle = self.tw.turtle_list.get_turtle(i, True)
+ tx, ty = self.tw.active_turtle.get_xy()
self.xcor = tx+30-self.width/2
self.ycor = self.height/2-ty-30
- self.heading = self.tw.turtle.get_heading()
- self.setcolor(self.tw.turtle.get_color())
- self.setshade(self.tw.turtle.get_shade())
- self.setpensize(self.tw.turtle.get_pen_size())
- self.pendown = self.tw.turtle.get_pen_state()
+ self.heading = self.tw.active_turtle.get_heading()
+ self.setcolor(self.tw.active_turtle.get_color())
+ self.setshade(self.tw.active_turtle.get_shade())
+ self.setpensize(self.tw.active_turtle.get_pen_size())
+ self.pendown = self.tw.active_turtle.get_pen_state()
self.tw.turtle_list.show_all()
diff --git a/talogo.py b/talogo.py
index ea637af..8a4c27f 100644
--- a/talogo.py
+++ b/talogo.py
@@ -162,7 +162,7 @@ def readline(lc, line):
return res
def setup_cmd(lc, str):
- lc.tw.turtle.hide()
+ lc.tw.active_turtle.hide()
lc.procstop=False
list = readline(lc, str)
lc.step = start_eval(lc, list)
@@ -179,11 +179,11 @@ def evline(lc, list):
lc.arglist = None
while lc.iline:
if lc.tw.step_time > 0:
- lc.tw.turtle.show()
+ lc.tw.active_turtle.show()
endtime = millis()+an_int(lc,lc.tw.step_time)*100
while millis()<endtime:
yield True
- lc.tw.turtle.hide()
+ lc.tw.active_turtle.hide()
token = lc.iline[0]
if token == lc.symopar:
token = lc.iline[1]
@@ -295,11 +295,11 @@ def no_args_check(lc):
raise logoerror("#noinput")
def prim_wait(lc,time):
- lc.tw.turtle.show()
+ lc.tw.active_turtle.show()
endtime = millis()+an_int(lc,time*1000)
while millis()<endtime:
yield True
- lc.tw.turtle.hide()
+ lc.tw.active_turtle.hide()
ireturn(lc); yield True
def prim_repeat(lc, num, list):
@@ -996,11 +996,11 @@ def doevalstep(lc):
try:
lc.step.next()
except StopIteration:
- lc.tw.turtle.show()
+ lc.tw.active_turtle.show()
return False
except logoerror, e:
showlabel(lc, str(e)[1:-1])
- lc.tw.turtle.show()
+ lc.tw.active_turtle.show()
return False
return True
diff --git a/taturtle.py b/taturtle.py
index f673d58..b171709 100644
--- a/taturtle.py
+++ b/taturtle.py
@@ -65,9 +65,9 @@ class Turtles:
# sprite utilities
#
def spr_to_turtle(self, spr):
- for b in self.list:
- if spr == b.spr:
- return b
+ for turtle in self.list:
+ if spr == turtle.spr:
+ return turtle
return None
#
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