diff options
author | Philip Withnall <philip@tecnocode.co.uk> | 2013-08-19 02:02:22 (GMT) |
---|---|---|
committer | Philip Withnall <philip@tecnocode.co.uk> | 2013-08-19 02:02:22 (GMT) |
commit | 7ba61fe675664f5ba718c22a8d4fd7d6e5fe009a (patch) | |
tree | cbab166cb5f2ad402e23914b94d149b1e6f1bdd3 /PascalTriangle.activity/pascaltriangle.py | |
parent | eeb46e54fd96248be07a85c28ea4a10035ac78d6 (diff) |
Add a slider to change the triangle size
Diffstat (limited to 'PascalTriangle.activity/pascaltriangle.py')
-rwxr-xr-x | PascalTriangle.activity/pascaltriangle.py | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/PascalTriangle.activity/pascaltriangle.py b/PascalTriangle.activity/pascaltriangle.py index f087ec1..2463cf0 100755 --- a/PascalTriangle.activity/pascaltriangle.py +++ b/PascalTriangle.activity/pascaltriangle.py @@ -64,8 +64,30 @@ class PascalTriangleActivity(activity.Activity): self._drawing_area_key_press_cb, None) drawing_area.connect('draw', self._drawing_area_draw_cb, None) + # Create an overlay and a slider to allow the triangle size to be + # adjusted. This is the number of cells on the triangle's base + # (equivalently, the number of rows in the triangle). + overlay = Gtk.Overlay() + overlay.connect('get-child-position', self._adjustment_get_position_cb, + None) + overlay.show() + overlay.add(drawing_area) + + slider = Gtk.VScale() + slider.props.digits = 0 # integers only + slider.props.draw_value = False + slider.props.has_origin = False + slider.set_range(2, 10) + slider.set_increments(1, 2) + slider.set_value(5) # initial triangle size + slider.show() + overlay.add_overlay(slider) + + self._triangle_size = int(slider.get_value()) + slider.connect('value-changed', self._slider_value_changed_cb, None) + # Parent and show the drawing area. - self.set_canvas(drawing_area) + self.set_canvas(overlay) drawing_area.show() self._drawing_area = drawing_area @@ -89,11 +111,6 @@ class PascalTriangleActivity(activity.Activity): self.remove_alert(self._alert) self._alert = None - # Set the initial size of the Pascal triangle to be drawn. This is - # the number of cells on its base (equivalently, the number of rows in - # the triangle). - self._triangle_size = 5 - # Padding around the edge of the drawing area. self._padding = 10.0 # Cairo units @@ -385,6 +402,24 @@ class PascalTriangleActivity(activity.Activity): show_hints = property(get_show_hints, set_show_hints) + def _adjustment_get_position_cb(self, overlay, child, alloc, data = None): + # Hard-code the size and position of the triangle size slider. + alloc.x = 10 + alloc.y = 10 + alloc.width = 70 + alloc.height = 150 + + return True + + def _slider_value_changed_cb(self, widget, data = None): + new_triangle_size = int(widget.get_value()) + + if new_triangle_size != self._triangle_size: + # Start a new game with the new triangle size. + self._triangle_size = new_triangle_size + self._start_game() + + class NewGameButton(ToolButton): def __init__(self, activity, **kwargs): ToolButton.__init__(self, 'add', **kwargs) |