Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/PascalTriangle.activity/pascaltriangle.py
diff options
context:
space:
mode:
authorPhilip 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)
commit7ba61fe675664f5ba718c22a8d4fd7d6e5fe009a (patch)
treecbab166cb5f2ad402e23914b94d149b1e6f1bdd3 /PascalTriangle.activity/pascaltriangle.py
parenteeb46e54fd96248be07a85c28ea4a10035ac78d6 (diff)
Add a slider to change the triangle size
Diffstat (limited to 'PascalTriangle.activity/pascaltriangle.py')
-rwxr-xr-xPascalTriangle.activity/pascaltriangle.py47
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)