diff options
author | Walter Bender <walter.bender@gmail.com> | 2011-02-27 18:35:35 (GMT) |
---|---|---|
committer | Walter Bender <walter.bender@gmail.com> | 2011-02-27 18:35:35 (GMT) |
commit | 071077470caf28dde2e7033f16b7431e594c13ec (patch) | |
tree | 9b4cac4628339e563c53530104e580d7a3321544 | |
parent | f29c61f4c1dbcd49d48c9915d0a84741b0995b0d (diff) |
enab;e setting defaultsv106
-rw-r--r-- | pysamples/load_block.py | 60 |
1 files changed, 38 insertions, 22 deletions
diff --git a/pysamples/load_block.py b/pysamples/load_block.py index 8fb9546..566ed47 100644 --- a/pysamples/load_block.py +++ b/pysamples/load_block.py @@ -30,39 +30,55 @@ def myblock(lc, blkname): # ########################################################################### - from taconstants import BLOCK_NAMES, PRIMITIVES + from taconstants import BLOCK_NAMES, PRIMITIVES, CONTENT_BLOCKS, \ + SPECIAL_NAMES from tautils import find_group - def new_block(lc, blkname, x, y): + def make_block(lc, name, x, y, defaults): + lc.tw._new_block(name, x + 20, y + 20, defaults) + + # 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 + + def find_block(lc, blkname, x, y, defaults=None): """ 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. """ + print blkname 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 + if blkname in BLOCK_NAMES[name]: + if (name in PRIMITIVES and PRIMITIVES[name] == name) or \ + name in CONTENT_BLOCKS: + return make_block(lc, name, x, y, defaults) + for name in SPECIAL_NAMES: + # Translate label name into block/prim name. + if blkname in SPECIAL_NAMES[name]: + return make_block(lc, name, x, y, defaults) + return -1 - # Place the block at the active turtle (x, y). + # Place the block at the active turtle (x, y) and + # push height to stack. x, y = lc.tw.active_turtle.get_xy() if type(blkname) == type([]): - for name in blkname: - y += int(new_block(lc, name, x, y)) + name = blkname[0] + value = blkname[1:] + dy = int(find_block(lc, name, x, y, value)) else: - new_block(lc, blkname, x, y) + name = blkname + dy = int(find_block(lc, name, x, y)) + if dy != -1: + lc.heap.append(dy) |