Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block.py399
-rw-r--r--tawindow.py110
2 files changed, 259 insertions, 250 deletions
diff --git a/block.py b/block.py
index 2336905..65cd563 100644
--- a/block.py
+++ b/block.py
@@ -71,26 +71,27 @@ class Block:
self.shape = None
self.selected_shape = None
self.name = name
+ self.colors = colors
+ self.scale = scale
self.docks = None
self.connections = None
self.defaults = []
self.content = None
self.primitive = None
- self._new_block_from_factory(sprite_list, name, labels, colors,
- scale, x, y)
+ self._new_block_from_factory(sprite_list, labels, x, y)
self.type = 'block'
self._left = 0
self._right = 0
- if DEFAULTS.has_key(name):
- self.defaults = DEFAULTS[name]
+ if DEFAULTS.has_key(self.name):
+ self.defaults = DEFAULTS[self.name]
if name in CONTENT_BLOCKS:
- self.content = name
+ self.content = self,name
if PRIMITIVES.has_key(name):
- self.primitive = PRIMITIVES[name]
+ self.primitive = PRIMITIVES[self.name]
block_list.append_to_list(self)
#
@@ -100,24 +101,33 @@ class Block:
# debug code
# etc.
- def _new_block_from_factory(self, sprite_list, name, labels, colors,
- scale, x, y):
+ # We resize some blocks on the fly
+ def resize(self):
+ # make sure the label fits
+ lw = self.spr.label_width()
+ lwh = self.spr.label_area_dimensions()
+ if lw > lwh[0]:
+ e = lw-lwh[0]
+ self._make_block(e, self.svg)
+ self.spr.set_shape(self.selected_shape)
+
+ def _new_block_from_factory(self, sprite_list, labels, x, y):
- print "new block: %s (%d %d)" % (name, x, y)
+ print "new block: %s (%d %d)" % (self.name, x, y)
- svg = SVG()
- svg.set_scale(scale)
- svg.set_gradiant(True)
- svg.set_innie([False])
- svg.set_outie(False)
- svg.set_tab(True)
- svg.set_slot(True)
+ self.svg = SVG()
+ self.svg.set_scale(self.scale)
+ self.svg.set_gradiant(True)
+ self.svg.set_innie([False])
+ self.svg.set_outie(False)
+ self.svg.set_tab(True)
+ self.svg.set_slot(True)
- self._make_block(name, 0, svg)
+ self._make_block(0, self.svg)
self.spr = sprites.Sprite(sprite_list, x, y, self.shape)
- self.spr.set_margins(self._left, svg.get_slot_depth(), self._right,
- svg.get_slot_depth()*2)
+ self.spr.set_margins(self._left, self.svg.get_slot_depth(), self._right,
+ self.svg.get_slot_depth()*2)
# if labels were passed, use them
if len(labels) > 0:
@@ -129,9 +139,9 @@ class Block:
elif i == 2: # bottom
self.spr.set_label_attributes(9, True, "right", "bottom", i)
# otherwise use default values
- elif BLOCK_NAMES.has_key(name):
- print BLOCK_NAMES[name]
- for i, l in enumerate(BLOCK_NAMES[name]):
+ elif BLOCK_NAMES.has_key(self.name):
+ print BLOCK_NAMES[self.name]
+ for i, l in enumerate(BLOCK_NAMES[self.name]):
self.spr.set_label(l,i)
if i == 1: # top
self.spr.set_label_attributes(9, True, "right", "top", i)
@@ -143,267 +153,268 @@ class Block:
lwh = self.spr.label_area_dimensions()
if lw > lwh[0]:
e = lw-lwh[0]
- self._make_block(name, e, svg)
+ self._make_block(e, svg)
self.spr.set_shape(self.shape)
- def _make_block(self, name, e, svg):
- self._set_colors(name, svg)
- svg.set_stroke_width(STANDARD_STROKE_WIDTH)
- svg.clear_docks()
- if name in BASIC_STYLE:
+ def _make_block(self, e, svg):
+ self._set_colors(svg)
+ self.svg.set_stroke_width(STANDARD_STROKE_WIDTH)
+ self.svg.clear_docks()
+ if self.name in BASIC_STYLE:
self._make_basic_style(e, svg)
- elif name in BASIC_STYLE_HEAD:
+ elif self.name in BASIC_STYLE_HEAD:
self._make_basic_style_head(e, svg)
- elif name in BASIC_STYLE_HEAD_1ARG:
+ elif self.name in BASIC_STYLE_HEAD_1ARG:
self._make_basic_style_head_1arg(e, svg)
- elif name in BASIC_STYLE_TAIL:
+ elif self.name in BASIC_STYLE_TAIL:
self._make_basic_style_tail(e, svg)
- elif name in BASIC_STYLE_1ARG:
+ elif self.name in BASIC_STYLE_1ARG:
self._make_basic_style_1arg(e, svg)
- elif name in BASIC_STYLE_2ARG:
+ elif self.name in BASIC_STYLE_2ARG:
self._make_basic_style_2arg(e, svg)
- elif name in BOX_STYLE:
+ elif self.name in BOX_STYLE:
self._make_box_style(e, svg)
- elif name in NUMBER_STYLE:
+ elif self.name in NUMBER_STYLE:
self._make_number_style(e, svg)
- elif name in NUMBER_STYLE_1ARG:
+ elif self.name in NUMBER_STYLE_1ARG:
self._make_number_style_1arg(e, svg)
- elif name in NUMBER_STYLE_PORCH:
+ elif self.name in NUMBER_STYLE_PORCH:
self._make_number_style_porch(e, svg)
- elif name in COMPARE_STYLE:
+ elif self.name in COMPARE_STYLE:
self._make_compare_style(e, svg)
- elif name in BOOLEAN_STYLE:
+ elif self.name in BOOLEAN_STYLE:
self._make_boolean_style(e, svg)
- elif name in NOT_STYLE:
+ elif self.name in NOT_STYLE:
self._make_not_style(e, svg)
- elif name in FLOW_STYLE:
+ elif self.name in FLOW_STYLE:
self._make_flow_style(e, svg)
- elif name in FLOW_STYLE_1ARG:
+ elif self.name in FLOW_STYLE_1ARG:
self._make_flow_style_1arg(e, svg)
- elif name in FLOW_STYLE_BOOLEAN:
+ elif self.name in FLOW_STYLE_BOOLEAN:
self._make_flow_style_boolean(e, svg)
else:
self._make_basic_style(e, svg)
- print "don't know how to create a %s block" % (name)
-
- def _set_colors(self, name, svg):
- if name in TURTLE_PALETTE:
- svg.set_colors(TURTLE_COLORS)
- elif name in PEN_PALETTE:
- svg.set_colors(PEN_COLORS)
- elif name in NUMBER_PALETTE:
- svg.set_colors(NUMBER_COLORS)
- elif name in BLOCKS_PALETTE:
- svg.set_colors(BLOCKS_COLORS)
- elif name in MISC_PALETTE:
- svg.set_colors(MISC_COLORS)
- elif name in FLOW_PALETTE:
- svg.set_colors(FLOW_COLORS)
- elif name in PORTFOLIO_PALETTE:
- svg.set_colors(PORTFOLIO_COLORS)
+ print "don't know how to create a %s block" % (self.name)
+
+ def _set_colors(self, svg):
+ if self.name in TURTLE_PALETTE:
+ self.colors = TURTLE_COLORS
+ elif self.name in PEN_PALETTE:
+ self.colors = PEN_COLORS
+ elif self.name in NUMBER_PALETTE:
+ self.colors = NUMBER_COLORS
+ elif self.name in BLOCKS_PALETTE:
+ self.colors = BLOCKS_COLORS
+ elif self.name in MISC_PALETTE:
+ self.colors = MISC_COLORS
+ elif self.name in FLOW_PALETTE:
+ self.colors = FLOW_COLORS
+ elif self.name in PORTFOLIO_PALETTE:
+ self.colors = PORTFOLIO_COLORS
+ self.svg.set_colors(self.colors)
def _make_basic_style(self, e, svg):
- svg.expand(40+e, 0)
+ self.svg.expand(40+e, 0)
self._make_basic_block(svg)
- self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
- ('flow', False,svg.docks[1][0], svg.docks[1][1]))
+ self.docks = (('flow', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('flow', False,self.svg.docks[1][0], self.svg.docks[1][1]))
self._left, self._right = 0, 0
def _make_basic_style_head(self, e, svg):
- svg.expand(40+e, 0)
- svg.set_slot(False)
- svg.set_cap(True)
+ self.svg.expand(40+e, 0)
+ self.svg.set_slot(False)
+ self.svg.set_cap(True)
self._make_basic_block(svg)
self.docks = (('start', True, 0, 0),
- ('flow', False, svg.docks[0][0], svg.docks[0][1]))
+ ('flow', False, self.svg.docks[0][0], self.svg.docks[0][1]))
self._left, self._right = 0, 0
def _make_basic_style_head_1arg(self, e, svg):
- svg.expand(40+e, 0)
- svg.set_innie([True])
- svg.set_slot(False)
- svg.set_cap(True)
+ self.svg.expand(40+e, 0)
+ self.svg.set_innie([True])
+ self.svg.set_slot(False)
+ self.svg.set_cap(True)
self._make_basic_block(svg)
self.docks = (('start', True, 0, 0),
- ('string', False, svg.docks[0][0], svg.docks[0][1]),
- ('flow', False, svg.docks[1][0], svg.docks[1][1]))
- self._left, self._right = 0, svg.get_innie_width()
+ ('string', False, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('flow', False, self.svg.docks[1][0], self.svg.docks[1][1]))
+ self._left, self._right = 0, self.svg.get_innie_width()
def _make_basic_style_tail(self, e, svg):
- svg.expand(40+e, 0)
- svg.set_tab(False)
+ self.svg.expand(40+e, 0)
+ self.svg.set_tab(False)
self._make_basic_block(svg)
- self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
+ self.docks = (('flow', True, self.svg.docks[0][0], self.svg.docks[0][1]),
('unavailable', False, 0, 0))
def _make_basic_style_1arg(self, e, svg):
- svg.expand(25+e, 0)
- svg.set_innie([True])
+ self.svg.expand(25+e, 0)
+ self.svg.set_innie([True])
self._make_basic_block(svg)
- self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
- ('number', False, svg.docks[1][0], svg.docks[1][1]),
- ('flow', False, svg.docks[2][0], svg.docks[2][1]))
- self._left, self._right = 0, svg.get_innie_width()
+ self.docks = (('flow', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('number', False, self.svg.docks[1][0], self.svg.docks[1][1]),
+ ('flow', False, self.svg.docks[2][0], self.svg.docks[2][1]))
+ self._left, self._right = 0, self.svg.get_innie_width()
def _make_basic_style_2arg(self, e, svg):
- svg.expand(25+e, 0)
- svg.set_innie([True,True])
+ self.svg.expand(25+e, 0)
+ self.svg.set_innie([True,True])
self._make_basic_block(svg)
- self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
- ('number', False, svg.docks[1][0], svg.docks[1][1]),
- ('number', False, svg.docks[2][0], svg.docks[2][1]),
- ('flow', False, svg.docks[3][0], svg.docks[3][1]))
- self._left, self._right = 0, svg.get_innie_width()*1.5
+ self.docks = (('flow', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('number', False, self.svg.docks[1][0], self.svg.docks[1][1]),
+ ('number', False, self.svg.docks[2][0], self.svg.docks[2][1]),
+ ('flow', False, self.svg.docks[3][0], self.svg.docks[3][1]))
+ self._left, self._right = 0, self.svg.get_innie_width()*1.5
def _make_box_style(self, e, svg):
- svg.expand(60+e, 0)
+ self.svg.expand(60+e, 0)
self._make_basic_box(svg)
- self.docks = (('number', True, svg.docks[0][0], svg.docks[0][1]),
+ self.docks = (('number', True, self.svg.docks[0][0], self.svg.docks[0][1]),
('unavailable', False, 0, 0))
- self._left, self._right = svg.docks[1][0], 0
+ self._left, self._right = self.svg.docks[1][0], 0
def _make_number_style(self, e, svg):
- svg.expand(e, 0)
- svg.set_innie([True,True])
- svg.set_outie(True)
- svg.set_tab(False)
- svg.set_slot(False)
+ self.svg.expand(e, 0)
+ self.svg.set_innie([True,True])
+ self.svg.set_outie(True)
+ self.svg.set_tab(False)
+ self.svg.set_slot(False)
self._make_basic_block(svg)
"""
NOTE:
The "outie" is added last, so the dock order in the NUMBER_STYLE
needs to be modified.
"""
- self.docks = (('number', True, svg.docks[2][0], svg.docks[2][1]),
- ('number', False, svg.docks[0][0], svg.docks[0][1]),
- ('number', False, svg.docks[1][0], svg.docks[1][1]))
- self._left, self._right = svg.docks[2][0], 0
+ self.docks = (('number', True, self.svg.docks[2][0], self.svg.docks[2][1]),
+ ('number', False, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('number', False, self.svg.docks[1][0], self.svg.docks[1][1]))
+ self._left, self._right = self.svg.docks[2][0], 0
def _make_number_style_1arg(self, e, svg):
- svg.expand(e, 0)
- svg.set_innie([True])
- svg.set_outie(True)
- svg.set_tab(False)
- svg.set_slot(False)
+ self.svg.expand(e, 0)
+ self.svg.set_innie([True])
+ self.svg.set_outie(True)
+ self.svg.set_tab(False)
+ self.svg.set_slot(False)
self._make_basic_block(svg)
- self.docks = (('number', True, svg.docks[1][0], svg.docks[1][1]),
- ('number', False, svg.docks[0][0], svg.docks[0][1]))
- self._left, self._right = svg.docks[1][0], svg.docks[1][0]
+ self.docks = (('number', True, self.svg.docks[1][0], self.svg.docks[1][1]),
+ ('number', False, self.svg.docks[0][0], self.svg.docks[0][1]))
+ self._left, self._right = self.svg.docks[1][0], self.svg.docks[1][0]
def _make_number_style_porch(self, e, svg):
- svg.expand(e, 0)
- svg.set_innie([True,True])
- svg.set_outie(True)
- svg.set_tab(False)
- svg.set_slot(False)
- svg.set_porch(True)
+ self.svg.expand(e, 0)
+ self.svg.set_innie([True,True])
+ self.svg.set_outie(True)
+ self.svg.set_tab(False)
+ self.svg.set_slot(False)
+ self.svg.set_porch(True)
self._make_basic_block(svg)
- self.docks = (('number', True, svg.docks[2][0], svg.docks[2][1]),
- ('number', False, svg.docks[0][0], svg.docks[0][1]),
- ('number', False, svg.docks[1][0], svg.docks[1][1]))
- self._left = svg.docks[2][0]
- self._right = svg.get_width()-svg.docks[0][0]
+ self.docks = (('number', True, self.svg.docks[2][0], self.svg.docks[2][1]),
+ ('number', False, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('number', False, self.svg.docks[1][0], self.svg.docks[1][1]))
+ self._left = self.svg.docks[2][0]
+ self._right = self.svg.get_width()-self.svg.docks[0][0]
def _make_compare_style(self, e, svg):
- svg.expand(10+e,0)
+ self.svg.expand(10+e,0)
self._make_boolean_compare(svg)
- self.docks = (('bool', True, svg.docks[0][0], svg.docks[0][1]),
- ('number', False, svg.docks[1][0], svg.docks[1][1]),
- ('number', False, svg.docks[2][0], svg.docks[2][1]))
- self._left, self._right = svg.get_width()-svg.docks[2][0], 0
+ self.docks = (('bool', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('number', False, self.svg.docks[1][0], self.svg.docks[1][1]),
+ ('number', False, self.svg.docks[2][0], self.svg.docks[2][1]))
+ self._left, self._right = self.svg.get_width()-self.svg.docks[2][0], 0
def _make_boolean_style(self, e, svg):
- svg.expand(10+e,0)
+ self.svg.expand(10+e,0)
self._make_boolean_and_or(svg)
- self.docks = (('bool', True, svg.docks[0][0], svg.docks[0][1]),
- ('bool', False, svg.docks[1][0], svg.docks[1][1]),
- ('bool', False, svg.docks[2][0], svg.docks[2][1]))
- self._left, self._right = svg.get_width()-svg.docks[1][0], 0
+ self.docks = (('bool', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('bool', False, self.svg.docks[1][0], self.svg.docks[1][1]),
+ ('bool', False, self.svg.docks[2][0], self.svg.docks[2][1]))
+ self._left, self._right = self.svg.get_width()-self.svg.docks[1][0], 0
def _make_not_style(self, e, svg):
- svg.expand(15+e, 0)
+ self.svg.expand(15+e, 0)
self._make_boolean_not(svg)
- self.docks = (('bool', True, svg.docks[0][0], svg.docks[0][1]),
- ('bool', False, svg.docks[1][0], svg.docks[1][1]))
- self._right = svg.get_width()-svg.docks[1][0]
+ self.docks = (('bool', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('bool', False, self.svg.docks[1][0], self.svg.docks[1][1]))
+ self._right = self.svg.get_width()-self.svg.docks[1][0]
self._left = self._right
def _make_flow_style(self, e, svg):
- svg.expand(25+e, 0)
- svg.set_slot(True)
+ self.svg.expand(25+e, 0)
+ self.svg.set_slot(True)
self._make_basic_flow(svg)
- self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
- ('flow', False, svg.docks[1][0], svg.docks[1][1]))
- self._left, self._right = 0, svg.get_width()-svg.docks[1][0]
+ self.docks = (('flow', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('flow', False, self.svg.docks[1][0], self.svg.docks[1][1]))
+ self._left, self._right = 0, self.svg.get_width()-self.svg.docks[1][0]
def _make_flow_style_1arg(self, e, svg):
- svg.expand(25+e, 0)
- svg.set_slot(True)
- svg.set_tab(True)
- svg.set_innie([True])
+ self.svg.expand(25+e, 0)
+ self.svg.set_slot(True)
+ self.svg.set_tab(True)
+ self.svg.set_innie([True])
self._make_basic_flow(svg)
- self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
- ('number', False, svg.docks[1][0], svg.docks[1][1]),
- ('flow', False, svg.docks[2][0], svg.docks[2][1]),
- ('flow', False, svg.docks[3][0], svg.docks[3][1]))
- self._left, self._right = 0, svg.get_width()-svg.docks[1][0]
+ self.docks = (('flow', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('number', False, self.svg.docks[1][0], self.svg.docks[1][1]),
+ ('flow', False, self.svg.docks[2][0], self.svg.docks[2][1]),
+ ('flow', False, self.svg.docks[3][0], self.svg.docks[3][1]))
+ self._left, self._right = 0, self.svg.get_width()-self.svg.docks[1][0]
def _make_flow_style_boolean(self, e, svg):
- svg.expand(25+e, 0)
- svg.set_slot(True)
- svg.set_tab(True)
- svg.set_boolean(True)
+ self.svg.expand(25+e, 0)
+ self.svg.set_slot(True)
+ self.svg.set_tab(True)
+ self.svg.set_boolean(True)
self._make_basic_flow(svg)
- self.docks = (('flow', True, svg.docks[0][0], svg.docks[0][1]),
- ('bool', False, svg.docks[1][0], svg.docks[1][1]),
- ('flow', False, svg.docks[2][0], svg.docks[2][1]),
- ('flow', False, svg.docks[3][0], svg.docks[3][1]))
- self._left, self._right = 0, svg.get_width()-svg.docks[1][0]
+ self.docks = (('flow', True, self.svg.docks[0][0], self.svg.docks[0][1]),
+ ('bool', False, self.svg.docks[1][0], self.svg.docks[1][1]),
+ ('flow', False, self.svg.docks[2][0], self.svg.docks[2][1]),
+ ('flow', False, self.svg.docks[3][0], self.svg.docks[3][1]))
+ self._left, self._right = 0, self.svg.get_width()-self.svg.docks[1][0]
def _make_basic_block(self, svg):
- self.shape = svg_str_to_pixbuf(svg.basic_block())
- self.width = svg.get_width()
- self.height = svg.get_height()
- svg.set_stroke_width(SELECTED_STROKE_WIDTH)
- svg.set_stroke_color(SELECTED_COLOR)
- self.selected_shape = svg_str_to_pixbuf(svg.basic_block())
+ self.shape = svg_str_to_pixbuf(self.svg.basic_block())
+ self.width = self.svg.get_width()
+ self.height = self.svg.get_height()
+ self.svg.set_stroke_width(SELECTED_STROKE_WIDTH)
+ self.svg.set_stroke_color(SELECTED_COLOR)
+ self.selected_shape = svg_str_to_pixbuf(self.svg.basic_block())
def _make_basic_box(self, svg):
- self.shape = svg_str_to_pixbuf(svg.basic_box())
- self.width = svg.get_width()
- self.height = svg.get_height()
- svg.set_stroke_width(SELECTED_STROKE_WIDTH)
- svg.set_stroke_color(SELECTED_COLOR)
- self.selected_shape = svg_str_to_pixbuf(svg.basic_box())
+ self.shape = svg_str_to_pixbuf(self.svg.basic_box())
+ self.width = self.svg.get_width()
+ self.height = self.svg.get_height()
+ self.svg.set_stroke_width(SELECTED_STROKE_WIDTH)
+ self.svg.set_stroke_color(SELECTED_COLOR)
+ self.selected_shape = svg_str_to_pixbuf(self.svg.basic_box())
def _make_basic_flow(self, svg):
- self.shape = svg_str_to_pixbuf(svg.basic_flow())
- self.width = svg.get_width()
- self.height = svg.get_height()
- svg.set_stroke_width(SELECTED_STROKE_WIDTH)
- svg.set_stroke_color(SELECTED_COLOR)
- self.selected_shape = svg_str_to_pixbuf(svg.basic_flow())
+ self.shape = svg_str_to_pixbuf(self.svg.basic_flow())
+ self.width = self.svg.get_width()
+ self.height = self.svg.get_height()
+ self.svg.set_stroke_width(SELECTED_STROKE_WIDTH)
+ self.svg.set_stroke_color(SELECTED_COLOR)
+ self.selected_shape = svg_str_to_pixbuf(self.svg.basic_flow())
def _make_boolean_compare(self, svg):
- self.shape = svg_str_to_pixbuf(svg.boolean_compare())
- self.width = svg.get_width()
- self.height = svg.get_height()
- svg.set_stroke_width(SELECTED_STROKE_WIDTH)
- svg.set_stroke_color(SELECTED_COLOR)
- self.selected_shape = svg_str_to_pixbuf(svg.boolean_compare())
+ self.shape = svg_str_to_pixbuf(self.svg.boolean_compare())
+ self.width = self.svg.get_width()
+ self.height = self.svg.get_height()
+ self.svg.set_stroke_width(SELECTED_STROKE_WIDTH)
+ self.svg.set_stroke_color(SELECTED_COLOR)
+ self.selected_shape = svg_str_to_pixbuf(self.svg.boolean_compare())
def _make_boolean_and_or(self, svg):
- self.shape = svg_str_to_pixbuf(svg.boolean_and_or())
- self.width = svg.get_width()
- self.height = svg.get_height()
- svg.set_stroke_width(SELECTED_STROKE_WIDTH)
- svg.set_stroke_color(SELECTED_COLOR)
- self.selected_shape = svg_str_to_pixbuf(svg.boolean_and_or())
+ self.shape = svg_str_to_pixbuf(self.svg.boolean_and_or())
+ self.width = self.svg.get_width()
+ self.height = self.svg.get_height()
+ self.svg.set_stroke_width(SELECTED_STROKE_WIDTH)
+ self.svg.set_stroke_color(SELECTED_COLOR)
+ self.selected_shape = svg_str_to_pixbuf(self.svg.boolean_and_or())
def _make_boolean_not(self, svg):
- self.shape = svg_str_to_pixbuf(svg.boolean_not())
- self.width = svg.get_width()
- self.height = svg.get_height()
- svg.set_stroke_width(SELECTED_STROKE_WIDTH)
- svg.set_stroke_color(SELECTED_COLOR)
- self.selected_shape = svg_str_to_pixbuf(svg.boolean_not())
+ self.shape = svg_str_to_pixbuf(self.svg.boolean_not())
+ self.width = self.svg.get_width()
+ self.height = self.svg.get_height()
+ self.svg.set_stroke_width(SELECTED_STROKE_WIDTH)
+ self.svg.set_stroke_color(SELECTED_COLOR)
+ self.selected_shape = svg_str_to_pixbuf(self.svg.boolean_not())
diff --git a/tawindow.py b/tawindow.py
index 334e3ad..0f510d3 100644
--- a/tawindow.py
+++ b/tawindow.py
@@ -608,6 +608,7 @@ class TurtleArtWindow():
elif self.selected_blk is not None and\
self.selected_blk.name == 'string':
self._process_alphanumeric_input(keyname, keyunicode)
+ self.selected_blk.resize()
return True
# Otherwise, use keyboard input to move blocks or turtles
else:
@@ -620,7 +621,6 @@ class TurtleArtWindow():
'''
def _process_numeric_input(self, keyname):
oldnum = self.selected_blk.spr.labels[0]
- print "adding %s to %s" % (keyname, oldnum)
if len(oldnum) == 0:
oldnum = '0'
if keyname == 'minus':
@@ -723,6 +723,23 @@ class TurtleArtWindow():
return True
"""
+ Button Press
+ """
+ def _buttonpress_cb(self, win, event):
+ self.window.grab_focus()
+ x, y = self.xy(event)
+ self.button_press(event.get_state()&gtk.gdk.CONTROL_MASK, x, y)
+
+ # if sharing, send button press
+ if self._sharing():
+ # print "sending button pressed"
+ if event.get_state()&gtk.gdk.CONTROL_MASK is True:
+ self.activity._send_event("p:"+str(x)+":"+str(y)+":"+'T')
+ else:
+ self.activity._send_event("p:"+str(x)+":"+str(y)+":"+'F')
+ return True
+
+ """
Button release
"""
def _buttonrelease_cb(self, win, event):
@@ -745,6 +762,7 @@ class TurtleArtWindow():
print "button release"
if verbose:
print "processing remote button release: " + str(x) + " " + str(y)
+ # We may have been moving the turtle
if self.selected_turtle is not None:
print "clicked on a turtle"
(tx, ty) = self.turtle.spr.get_xy()
@@ -756,57 +774,50 @@ class TurtleArtWindow():
display_coordinates(self)
self.selected_turtle = None
return
+
+ # If we don't have a group of blocks, then there is nothing to do.
if self.drag_group == None:
return
+
blk = self.drag_group[0]
- # remove block by dragging them onto the category palette
+ # Remove blocks by dragging them onto the category palette
if self.block_operation=='move' and self.category_spr.hit((x,y)):
for b in self.drag_group: b.spr.hide()
self.drag_group = None
return
+
+ # Pull a stack of new blocks off of the category palette.
+ # TODO: rethink when palette moves to toolbar
if self.block_operation=='new':
for b in self.drag_group:
(bx, by) = b.spr.get_xy()
b.spr.move((bx+200, by))
+
+ # Look to see if we can dock the current stack.
self._snap_to_dock()
for b in self.drag_group:
b.spr.set_layer(BLOCK_LAYER)
self.drag_group = None
+
+ # Find the block we clicked on and process it.
if self.block_operation=='click':
- blk = self.block_list.spr_to_block(self.selected_spr)
- if blk is not None and blk.name=='number':
- blk.spr.set_shape(blk.selected_shape)
- self.selected_blk = blk
- elif blk is not None and blk.name=='string':
- self.selected_blk = blk
- blk.spr.set_shape(blk.selected_shape)
- '''
- # need new strategy for media blocks
- elif blk.name in self.importblocks:
- self._import_from_journal(spr)
- '''
- elif blk is not None and blk.name=='nop' and self.myblock==None:
- self.activity.import_py()
- else:
- if blk is not None:
- blk.spr.set_shape(blk.selected_shape)
- self.selected_blk = blk
- self._run_stack(blk)
+ self._click_block()
"""
click block
"""
def _click_block(self):
blk = self.block_list.spr_to_block(self.selected_spr)
- if blk is not None and blk.name=='number':
- self.selected_blk = blk
- elif blk is not None and blk.name=='string':
- self.selected_blk = blk
+ if blk is None:
+ return
+ self.selected_blk = blk
+ if blk.name=='number' or blk.name=='string':
+ pass
'''
elif blk.name in self.importblocks:
self._import_from_journal(self.selected_spr)
'''
- elif blk is not None and blk.name=='nop' and self.myblock==None:
+ elif blk.name=='nop' and self.myblock==None:
self.activity.import_py()
else:
self._run_stack(blk)
@@ -819,23 +830,6 @@ class TurtleArtWindow():
return True
"""
- Button Press
- """
- def _buttonpress_cb(self, win, event):
- self.window.grab_focus()
- x, y = self.xy(event)
- self.button_press(event.get_state()&gtk.gdk.CONTROL_MASK, x, y)
-
- # if sharing, send button press
- if self._sharing():
- # print "sending button pressed"
- if event.get_state()&gtk.gdk.CONTROL_MASK is True:
- self.activity._send_event("p:"+str(x)+":"+str(y)+":"+'T')
- else:
- self.activity._send_event("p:"+str(x)+":"+str(y)+":"+'F')
- return True
-
- """
snap_to_dock
"""
def _snap_to_dock(self):
@@ -902,20 +896,23 @@ class TurtleArtWindow():
print "Journal Object Chooser unavailable from outside of Sugar"
"""
- run stack
+ Run stack
"""
def _run_stack(self, blk):
+ if blk is None:
+ return
self.lc.ag = None
top = self._find_top_block(blk)
run_blocks(self.lc, top, self.block_list.list, True)
gobject.idle_add(doevalstep, self.lc)
"""
- block selector pressed
+ Block selector pressed
+ TODO: move to toolbar
"""
def _block_selector_pressed(self, x, y):
proto = self._get_proto_from_category(x, y)
- if proto==None:
+ if proto is None:
return
if proto is not 'hide':
self._new_block_from_category(proto, x, y)
@@ -923,7 +920,7 @@ class TurtleArtWindow():
self.hideshow_palette(False)
"""
- new block from category
+ Make a new block.
"""
def _new_block_from_category(self, proto, x, y):
if proto is None:
@@ -965,7 +962,7 @@ class TurtleArtWindow():
self.block_operation = 'new'
"""
- debugging tools
+ Debugging tools
"""
def _print_spr_list(self, spr_list):
s = ""
@@ -988,7 +985,7 @@ class TurtleArtWindow():
return s
"""
- disconnect block
+ Disconnect block from stack above it.
"""
def _disconnect(self, blk):
if blk.connections[0]==None:
@@ -1000,7 +997,7 @@ class TurtleArtWindow():
blk.connections[0] = None
"""
- turtle pressed
+ Turtle pressed
"""
def _turtle_pressed(self, x, y):
(tx, ty) = self.turtle.spr.get_xy()
@@ -1012,6 +1009,7 @@ class TurtleArtWindow():
"""
Replace Journal block graphic with preview image
+ TODO: move to block
"""
def _load_image(self, picture, spr):
from talogo import get_pixbuf_from_journal
@@ -1022,7 +1020,7 @@ class TurtleArtWindow():
spr.set_image(self.media_shapes['texton'])
"""
- dock_dx_dy
+ Find the distance between the dock points of two blocks.
"""
def _dock_dx_dy(self, block1, dock1n, block2, dock2n):
dock1 = block1.docks[dock1n]
@@ -1068,14 +1066,14 @@ class TurtleArtWindow():
return ((b1x+d1x)-(b2x+d2x), (b1y+d1y)-(b2y+d2y))
"""
- magnitude
+ Magnitude
"""
def _magnitude(self, pos):
x,y = pos
return x*x+y*y
"""
- jog turtle
+ Jog turtle
"""
def _jog_turtle(self, dx, dy):
if dx == -1 and dy == -1:
@@ -1089,7 +1087,7 @@ class TurtleArtWindow():
self.selected_turtle = None
"""
- jog block
+ Jog block
"""
def _jog_block(self, blk, dx, dy):
# drag entire stack if moving lock block
@@ -1107,7 +1105,7 @@ class TurtleArtWindow():
self.drag_group = None
"""
- make sure number block contains a number
+ Make sure a 'number' block contains a number.
"""
def _number_check(self):
if self.selected_blk.spr.labels[0] in ['-', '.', '-.']:
@@ -1126,7 +1124,7 @@ class TurtleArtWindow():
showlabel(self.lc, "#notanumber")
#
-# utilities used for checking variable validity
+# Utilities used for checking variable validity
#
def numcheck(new, old):