From ceeb060e57fe9d98a778c1d9be8c367c3f814aff Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Sat, 26 Feb 2011 16:09:56 +0000 Subject: load multiple blocks at once --- (limited to 'pysamples/load_block.py') diff --git a/pysamples/load_block.py b/pysamples/load_block.py index 848c0e1..084786d 100644 --- a/pysamples/load_block.py +++ b/pysamples/load_block.py @@ -21,7 +21,7 @@ # This procedure is invoked when the user-definable block on the "extras" # palette is selected. -def myblock(lc, x): +def myblock(lc, blkname): ########################################################################### # @@ -32,28 +32,38 @@ def myblock(lc, x): from taconstants import BLOCK_NAMES, PRIMITIVES from tautils import find_group - # It is a bit more work than just calling _new_block(). - # We need to: - # (1) translate the label name into the internal block name; - # (2) 'dock' the block onto a stack where appropriate; and - # (3) disassociate the new block from the mouse. - - # Place the block at the turtle. - tx, ty = lc.tw.active_turtle.get_xy() - for name in BLOCK_NAMES: - # Translate label name into block/prim name. - if x == BLOCK_NAMES[name][0] and PRIMITIVES[name] == name: - lc.tw._new_block(name, tx + 20, ty + 20) - - # Find the block we just created and attach it to a stack. - lc.tw.drag_group = None - spr = lc.tw.sprite_list.find_sprite((tx + 20, ty + 20)) - if spr is not None: - blk = lc.tw.block_list.spr_to_block(spr) - if blk is not None: - lc.tw.drag_group = find_group(blk) - lc.tw._snap_to_dock() - - # Disassociate new block from mouse. - lc.tw.drag_group = None - return + + def new_block(lc, blkname, x, y): + """ Create a new block. It is a bit more work than just calling + _new_block(). We need to: + (1) translate the label name into the internal block name; + (2) 'dock' the block onto a stack where appropriate; and + (3) disassociate the new block from the mouse. """ + + for name in BLOCK_NAMES: + # Translate label name into block/prim name. + if blkname in BLOCK_NAMES[name] and PRIMITIVES[name] == name: + lc.tw._new_block(name, x + 20, y + 20) + + # Find the block we just created and attach it to a stack. + lc.tw.drag_group = None + spr = lc.tw.sprite_list.find_sprite((x + 20, y + 20)) + if spr is not None: + blk = lc.tw.block_list.spr_to_block(spr) + if blk is not None: + lc.tw.drag_group = find_group(blk) + lc.tw._snap_to_dock() + + # Disassociate new block from mouse. + lc.tw.drag_group = None + return blk.height + return 0 + + # Place the block at the active turtle (x, y). + x, y = lc.tw.active_turtle.get_xy() + if type(blkname) == type([]): + for name in blkname: + y += int(new_block(lc, name, x, y)) + else: + new_block(lc, blkname, x, y) + -- cgit v0.9.1