Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2012-01-06 00:20:39 (GMT)
committer Walter Bender <walter.bender@gmail.com>2012-01-06 00:20:39 (GMT)
commit5dc2ede4623608db76524faff04fa6f3640c8e4c (patch)
tree47ccb6115d338dfd970008976b21a03ee18085b6
parent256d24722b5e93becc629777eaa6190326c3d2d4 (diff)
add adjusters for number blocks
-rwxr-xr-xTurtleArt/tasprite_factory.py28
-rw-r--r--TurtleArt/tawindow.py44
2 files changed, 69 insertions, 3 deletions
diff --git a/TurtleArt/tasprite_factory.py b/TurtleArt/tasprite_factory.py
index 3164140..d9f2cc0 100755
--- a/TurtleArt/tasprite_factory.py
+++ b/TurtleArt/tasprite_factory.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-#Copyright (c) 2009,10 Walter Bender
+#Copyright (c) 2009-12 Walter Bender
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
@@ -393,6 +393,32 @@ class SVG:
self.margins[2] = int(self._stroke_width * self._scale)
return self.header() + svg
+ def triangle_up(self, colors):
+ ''' A triangle that points up '''
+ self.reset_min_max()
+ self._fill, self._stroke = colors[0], colors[1]
+ self._width, self._height = 55, 55
+ svg = self.new_path(0, 55)
+ svg += self._rline_to(27.5, -55)
+ svg += self._rline_to(27.5, 55)
+ svg += self._close_path()
+ svg += self.style()
+ svg += self.footer()
+ return self.header() + svg
+
+ def triangle_down(self, colors):
+ ''' A triangle that points down '''
+ self.reset_min_max()
+ self._fill, self._stroke = colors[0], colors[1]
+ self._width, self._height = 55, 55
+ svg = self.new_path(0, 0)
+ svg += self._rline_to(27.5, 55)
+ svg += self._rline_to(27.5, -55)
+ svg += self._close_path()
+ svg += self.style()
+ svg += self.footer()
+ return self.header() + svg
+
def turtle(self, colors):
''' Turtles are just another block '''
self.reset_min_max()
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index 36628d8..846c77c 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -192,6 +192,7 @@ class TurtleArtWindow():
self.selected_blk = None
self.selected_spr = None
self.selected_turtle = None
+ self.triangle_sprs = []
self.drag_group = None
self.drag_turtle = 'move', 0, 0
self.drag_pos = 0, 0
@@ -414,6 +415,20 @@ class TurtleArtWindow():
self.toolbar_shapes[name].type = 'toolbar'
self.toolbar_shapes['stopiton'].hide()
+ # Make the triangle buttons for adjusting numeric values
+ svg = SVG()
+ svg.set_scale(self.scale)
+ self.triangle_sprs.append(Sprite(self.sprite_list, 0, 0,
+ svg_str_to_pixbuf(svg.triangle_up(["#FF00FF", "#A000A0"]))))
+ self.triangle_sprs[-1].set_label('+')
+ self.triangle_sprs[-1].type = 'control'
+ self.triangle_sprs[-1].hide()
+ self.triangle_sprs.append(Sprite(self.sprite_list, 0, 0,
+ svg_str_to_pixbuf(svg.triangle_down(["#FF00FF", "#A000A0"]))))
+ self.triangle_sprs[-1].set_label('-')
+ self.triangle_sprs[-1].type = 'control'
+ self.triangle_sprs[-1].hide()
+
def set_sharing(self, shared):
self._sharing = shared
@@ -994,8 +1009,25 @@ class TurtleArtWindow():
def button_press(self, mask, x, y):
self.block_operation = 'click'
+ # Find out what was clicked
+ spr = self.sprite_list.find_sprite((x, y))
+
# Unselect things that may have been selected earlier
if self.selected_blk is not None:
+ if self.selected_blk.name == 'number' and spr in self.triangle_sprs:
+ # increment or decrement a number block
+ nf = float(self.selected_blk.spr.labels[0].replace(CURSOR, ''))
+ ni = int(nf)
+ if ni == nf:
+ n = ni
+ else:
+ n = nf
+ if spr == self.triangle_sprs[0]:
+ n += 1
+ else:
+ n -= 1
+ self.selected_blk.spr.set_label(str(n) + CURSOR)
+ return True
self._unselect_block()
self.selected_turtle = None
@@ -1003,8 +1035,6 @@ class TurtleArtWindow():
if self.status_spr is not None:
self.status_spr.hide()
- # Find out what was clicked
- spr = self.sprite_list.find_sprite((x, y))
self.dx = 0
self.dy = 0
if spr is None:
@@ -1267,6 +1297,8 @@ class TurtleArtWindow():
# After unselecting a 'number' block, we need to check its value
if self.selected_blk.name == 'number':
self._number_check()
+ for spr in self.triangle_sprs:
+ spr.hide()
elif self.selected_blk.name == 'string':
self._string_check()
self.selected_blk.unhighlight()
@@ -1791,6 +1823,14 @@ class TurtleArtWindow():
if blk.name == 'number' or blk.name == 'string':
self.saved_string = blk.spr.labels[0]
blk.spr.labels[0] += CURSOR
+ if blk.name == 'number':
+ bx, by = blk.spr.get_xy()
+ bw, bh = blk.spr.get_dimensions()
+ tw, th = self.triangle_sprs[0].get_dimensions()
+ for spr in self.triangle_sprs:
+ spr.restore()
+ self.triangle_sprs[0].move((int(bx + (bw - tw) / 2), by - th))
+ self.triangle_sprs[1].move((int(bx + (bw - tw) / 2), by + bh))
elif blk.name in block_styles['box-style-media'] and \
blk.name not in NO_IMPORT: