From 5dc2ede4623608db76524faff04fa6f3640c8e4c Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Fri, 06 Jan 2012 00:20:39 +0000 Subject: add adjusters for number blocks --- (limited to 'TurtleArt') 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: -- cgit v0.9.1